diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000000000000000000000000000000000000..11a1b970af4ea4a0c4aef7bed5190f292c9b88a3
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,29 @@
+# http://editorconfig.org
+
+root = true
+
+[*]
+charset = utf-8
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+
+[*.{py,rst,ini}]
+indent_style = space
+indent_size = 4
+
+[*.py]
+line_length=120
+known_first_party=funkwhale_api
+multi_line_output=3
+default_section=THIRDPARTY
+
+[*.{html,js,vue,css,scss,json,yml,ts}]
+indent_style = space
+indent_size = 2
+
+[*.md]
+trim_trailing_whitespace = false
+
+[Makefile]
+indent_style = tab
diff --git a/.gitignore b/.gitignore
index ed341baacf5206ff8e5ae7dcd3f917d7e96b2a03..a547bf36d8d11a4f89c59c144f24795749086dd1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,24 @@
-wwwroot/*.js
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+lerna-debug.log*
+
 node_modules
-typings
 dist
-schema.yml
+dist-ssr
+*.local
+
+# Editor directories and files
+.vscode/*
+!.vscode/extensions.json
+.idea
+.DS_Store
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
diff --git a/.gitpod.yml b/.gitpod.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9a09b2163fa8ad45a50ee2414b151730c6c470e8
--- /dev/null
+++ b/.gitpod.yml
@@ -0,0 +1,8 @@
+# This configuration file was automatically generated by Gitpod.
+# Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file)
+# and commit this file to your remote git repository to share the goodness with others.
+
+tasks:
+  - init: npm install && npm run build
+
+
diff --git a/.npmignore b/.npmignore
deleted file mode 100644
index da8b16bfadcd56bb6bc7c061007cdf9cbcd2c971..0000000000000000000000000000000000000000
--- a/.npmignore
+++ /dev/null
@@ -1,2 +0,0 @@
-# empty npmignore to ensure all required files (e.g., in the dist folder) are published by npm
-schema.yml
diff --git a/.openapi-generator-ignore b/.openapi-generator-ignore
deleted file mode 100644
index 8fe5e24ee98c278c476f8ec06752015ba10ebfb8..0000000000000000000000000000000000000000
--- a/.openapi-generator-ignore
+++ /dev/null
@@ -1,29 +0,0 @@
-# OpenAPI Generator Ignore
-# Generated by openapi-generator https://github.com/openapitools/openapi-generator
-
-# Use this file to prevent files from being overwritten by the generator.
-# The patterns follow closely to .gitignore or .dockerignore.
-
-# As an example, the C# client generator defines ApiClient.cs.
-# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
-#ApiClient.cs
-
-# You can match any string of characters against a directory, file or extension with a single asterisk (*):
-#foo/*/qux
-# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
-
-# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
-#foo/**/qux
-# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
-
-# You can also negate patterns with an exclamation (!).
-# For example, you can ignore all files in a docs folder with the file extension .md:
-#docs/*.md
-# Then explicitly reverse the ignore rule for a single file:
-#!docs/README.md
-
-git_push.sh
-generate.sh
-config.yaml
-.gitignore
-.npmignore
diff --git a/.openapi-generator/FILES b/.openapi-generator/FILES
deleted file mode 100644
index 09c907a760f2530a60ca4de4bce3db613cf922ed..0000000000000000000000000000000000000000
--- a/.openapi-generator/FILES
+++ /dev/null
@@ -1,200 +0,0 @@
-.gitignore
-.npmignore
-README.md
-api.ts
-api/activity-api.ts
-api/albums-api.ts
-api/artists-api.ts
-api/attachments-api.ts
-api/auth-api.ts
-api/channels-api.ts
-api/favorites-api.ts
-api/federation-api.ts
-api/history-api.ts
-api/instance-api.ts
-api/libraries-api.ts
-api/licenses-api.ts
-api/listen-api.ts
-api/manage-api.ts
-api/moderation-api.ts
-api/mutations-api.ts
-api/oauth-api.ts
-api/oembed-api.ts
-api/playlists-api.ts
-api/plugins-api.ts
-api/radios-api.ts
-api/rate-limit-api.ts
-api/search-api.ts
-api/stream-api.ts
-api/subscriptions-api.ts
-api/tags-api.ts
-api/text-preview-api.ts
-api/tracks-api.ts
-api/uploads-api.ts
-api/users-api.ts
-base.ts
-common.ts
-configuration.ts
-git_push.sh
-index.ts
-package.json
-tsconfig.json
-types/activity.ts
-types/album-create-description.ts
-types/album-create.ts
-types/album.ts
-types/allow-list-stat.ts
-types/apiactor.ts
-types/apimutation.ts
-types/application.ts
-types/artist-album.ts
-types/artist-with-albums.ts
-types/attachment.ts
-types/channel-create.ts
-types/channel-update.ts
-types/channel.ts
-types/content-category-enum.ts
-types/content-type-enum.ts
-types/content.ts
-types/cover-field.ts
-types/create-application.ts
-types/domain.ts
-types/endpoints.ts
-types/federation-choice-enum.ts
-types/fetch-status-enum.ts
-types/fetch.ts
-types/full-actor.ts
-types/global-preference.ts
-types/ident.ts
-types/inbox-item-type-enum.ts
-types/inbox-item.ts
-types/index.ts
-types/library-follow.ts
-types/library-for-owner.ts
-types/library-privacy-level-enum.ts
-types/library-scan.ts
-types/library.ts
-types/license.ts
-types/listening-write.ts
-types/listening.ts
-types/manage-actor.ts
-types/manage-album.ts
-types/manage-artist.ts
-types/manage-base-actor.ts
-types/manage-base-note.ts
-types/manage-channel.ts
-types/manage-domain-update.ts
-types/manage-domain.ts
-types/manage-instance-policy.ts
-types/manage-invitation.ts
-types/manage-library.ts
-types/manage-nested-artist.ts
-types/manage-nested-library.ts
-types/manage-nested-track.ts
-types/manage-note.ts
-types/manage-report.ts
-types/manage-tag.ts
-types/manage-target-type-enum.ts
-types/manage-target.ts
-types/manage-track-album.ts
-types/manage-track.ts
-types/manage-upload-import-status-enum.ts
-types/manage-upload.ts
-types/manage-user-request-status-enum.ts
-types/manage-user-request-type-enum.ts
-types/manage-user-request.ts
-types/manage-user-simple.ts
-types/manage-user.ts
-types/metadata-usage-favorite.ts
-types/metadata-usage.ts
-types/metadata.ts
-types/moderation-target-type-enum.ts
-types/moderation-target.ts
-types/nested-library-follow.ts
-types/node-info20-services.ts
-types/node-info20.ts
-types/paginated-album-list.ts
-types/paginated-apimutation-list.ts
-types/paginated-application-list.ts
-types/paginated-artist-with-albums-list.ts
-types/paginated-channel-list.ts
-types/paginated-domain-list.ts
-types/paginated-inbox-item-list.ts
-types/paginated-library-follow-list.ts
-types/paginated-library-for-owner-list.ts
-types/paginated-license-list.ts
-types/paginated-listening-list.ts
-types/paginated-manage-actor-list.ts
-types/paginated-manage-album-list.ts
-types/paginated-manage-artist-list.ts
-types/paginated-manage-channel-list.ts
-types/paginated-manage-domain-list.ts
-types/paginated-manage-instance-policy-list.ts
-types/paginated-manage-invitation-list.ts
-types/paginated-manage-library-list.ts
-types/paginated-manage-note-list.ts
-types/paginated-manage-report-list.ts
-types/paginated-manage-tag-list.ts
-types/paginated-manage-track-list.ts
-types/paginated-manage-upload-list.ts
-types/paginated-manage-user-list.ts
-types/paginated-manage-user-request-list.ts
-types/paginated-playlist-list.ts
-types/paginated-radio-list.ts
-types/paginated-subscription-list.ts
-types/paginated-tag-list.ts
-types/paginated-track-list.ts
-types/paginated-upload-for-owner-list.ts
-types/paginated-user-filter-list.ts
-types/paginated-user-track-favorite-list.ts
-types/password-change.ts
-types/password-reset-confirm.ts
-types/password-reset.ts
-types/patched-application.ts
-types/patched-channel-update.ts
-types/patched-global-preference.ts
-types/patched-inbox-item.ts
-types/patched-library-for-owner.ts
-types/patched-manage-domain-update.ts
-types/patched-manage-instance-policy.ts
-types/patched-manage-invitation.ts
-types/patched-manage-library.ts
-types/patched-manage-report.ts
-types/patched-manage-user-request.ts
-types/patched-manage-user.ts
-types/patched-playlist.ts
-types/patched-radio.ts
-types/patched-upload-for-owner-track.ts
-types/patched-upload-for-owner.ts
-types/patched-user-details.ts
-types/patched-user-write.ts
-types/playlist.ts
-types/privacy-level-enum.ts
-types/radio-session-track-serializer-create.ts
-types/radio-session.ts
-types/radio.ts
-types/rate-limit.ts
-types/register.ts
-types/report-type-enum.ts
-types/report-type.ts
-types/report.ts
-types/scopes.ts
-types/services.ts
-types/simple-artist.ts
-types/software.ts
-types/subscription.ts
-types/tag.ts
-types/total-count.ts
-types/track-album.ts
-types/track.ts
-types/upload-for-owner-import-status-enum.ts
-types/upload-for-owner.ts
-types/usage.ts
-types/user-basic.ts
-types/user-details.ts
-types/user-filter.ts
-types/user-track-favorite-write.ts
-types/user-track-favorite.ts
-types/user-write.ts
-types/users-usage.ts
-types/verify-email.ts
diff --git a/.openapi-generator/VERSION b/.openapi-generator/VERSION
deleted file mode 100644
index ecedc98d1d5a2a7d871b8be6e3c56029e6cc5460..0000000000000000000000000000000000000000
--- a/.openapi-generator/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-4.3.1
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index ed0d29259ca5729d8e4ae361c9e364e64b325900..0000000000000000000000000000000000000000
--- a/README.md
+++ /dev/null
@@ -1,45 +0,0 @@
-## @funkwhale/api@1.2.8
-
-This generator creates TypeScript/JavaScript client that utilizes [axios](https://github.com/axios/axios). The generated Node module can be used in the following environments:
-
-Environment
-* Node.js
-* Webpack
-* Browserify
-
-Language level
-* ES5 - you must have a Promises/A+ library installed
-* ES6
-
-Module system
-* CommonJS
-* ES6 module system
-
-It can be used in both TypeScript and JavaScript. In TypeScript, the definition should be automatically resolved via `package.json`. ([Reference](http://www.typescriptlang.org/docs/handbook/typings-for-npm-packages.html))
-
-### Building
-
-To build and compile the typescript sources to javascript use:
-```
-npm install
-npm run build
-```
-
-### Publishing
-
-First build the package then run ```npm publish```
-
-### Consuming
-
-navigate to the folder of your consuming project and run one of the following commands.
-
-_published:_
-
-```
-npm install @funkwhale/api@1.2.8 --save
-```
-
-_unPublished (not recommended):_
-
-```
-npm install PATH_TO_GENERATED_PACKAGE --save
diff --git a/api.ts b/api.ts
deleted file mode 100644
index c6afa019b9158b866d4842eb2f401928890d4cd7..0000000000000000000000000000000000000000
--- a/api.ts
+++ /dev/null
@@ -1,46 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-export * from './api/activity-api';
-export * from './api/albums-api';
-export * from './api/artists-api';
-export * from './api/attachments-api';
-export * from './api/auth-api';
-export * from './api/channels-api';
-export * from './api/favorites-api';
-export * from './api/federation-api';
-export * from './api/history-api';
-export * from './api/instance-api';
-export * from './api/libraries-api';
-export * from './api/licenses-api';
-export * from './api/listen-api';
-export * from './api/manage-api';
-export * from './api/moderation-api';
-export * from './api/mutations-api';
-export * from './api/oauth-api';
-export * from './api/oembed-api';
-export * from './api/playlists-api';
-export * from './api/plugins-api';
-export * from './api/radios-api';
-export * from './api/rate-limit-api';
-export * from './api/search-api';
-export * from './api/stream-api';
-export * from './api/subscriptions-api';
-export * from './api/tags-api';
-export * from './api/text-preview-api';
-export * from './api/tracks-api';
-export * from './api/uploads-api';
-export * from './api/users-api';
-
diff --git a/api/activity-api.ts b/api/activity-api.ts
deleted file mode 100644
index 69f318df59eba6b3406cc40f9f45a7cea25c98b7..0000000000000000000000000000000000000000
--- a/api/activity-api.ts
+++ /dev/null
@@ -1,156 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-/**
- * ActivityApi - axios parameter creator
- * @export
- */
-export const ActivityApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        activityList: async (ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/activity/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * ActivityApi - functional programming interface
- * @export
- */
-export const ActivityApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async activityList(ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ActivityApiAxiosParamCreator(configuration).activityList(ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * ActivityApi - factory interface
- * @export
- */
-export const ActivityApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        activityList(ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<void> {
-            return ActivityApiFp(configuration).activityList(ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * ActivityApi - object-oriented interface
- * @export
- * @class ActivityApi
- * @extends {BaseAPI}
- */
-export class ActivityApi extends BaseAPI {
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ActivityApi
-     */
-    public activityList(ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return ActivityApiFp(this.configuration).activityList(ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/albums-api.ts b/api/albums-api.ts
deleted file mode 100644
index 842367104856b8ac396be783776a18450ab338d2..0000000000000000000000000000000000000000
--- a/api/albums-api.ts
+++ /dev/null
@@ -1,973 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Album } from '../types';
-// @ts-ignore
-import { AlbumCreate } from '../types';
-// @ts-ignore
-import { PaginatedAlbumList } from '../types';
-/**
- * AlbumsApi - axios parameter creator
- * @export
- */
-export const AlbumsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {AlbumCreate} albumCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsCreate: async (albumCreate: AlbumCreate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'albumCreate' is not null or undefined
-            if (albumCreate === null || albumCreate === undefined) {
-                throw new RequiredError('albumCreate','Required parameter albumCreate was null or undefined when calling albumsCreate.');
-            }
-            const localVarPath = `/api/v1/albums/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof albumCreate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(albumCreate !== undefined ? albumCreate : {}) : (albumCreate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling albumsDestroy.');
-            }
-            const localVarPath = `/api/v1/albums/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {Album} album 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsFetchesCreate: async (id: number, album: Album, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling albumsFetchesCreate.');
-            }
-            // verify required parameter 'album' is not null or undefined
-            if (album === null || album === undefined) {
-                throw new RequiredError('album','Required parameter album was null or undefined when calling albumsFetchesCreate.');
-            }
-            const localVarPath = `/api/v1/albums/{id}/fetches/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof album !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(album !== undefined ? album : {}) : (album || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsFetchesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling albumsFetchesRetrieve.');
-            }
-            const localVarPath = `/api/v1/albums/{id}/fetches/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsLibrariesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling albumsLibrariesRetrieve.');
-            }
-            const localVarPath = `/api/v1/albums/{id}/libraries/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} [artist] 
-         * @param {string} [channel] 
-         * @param {string} [contentCategory] 
-         * @param {boolean} [hidden] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mbid] 
-         * @param {Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsList: async (artist?: number, channel?: string, contentCategory?: string, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, ordering?: Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/albums/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (artist !== undefined) {
-                localVarQueryParameter['artist'] = artist;
-            }
-
-            if (channel !== undefined) {
-                localVarQueryParameter['channel'] = channel;
-            }
-
-            if (contentCategory !== undefined) {
-                localVarQueryParameter['content_category'] = contentCategory;
-            }
-
-            if (hidden !== undefined) {
-                localVarQueryParameter['hidden'] = hidden;
-            }
-
-            if (includeChannels !== undefined) {
-                localVarQueryParameter['include_channels'] = includeChannels;
-            }
-
-            if (library !== undefined) {
-                localVarQueryParameter['library'] = library;
-            }
-
-            if (mbid !== undefined) {
-                localVarQueryParameter['mbid'] = mbid;
-            }
-
-            if (ordering) {
-                localVarQueryParameter['ordering'] = ordering.join(COLLECTION_FORMATS.csv);
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (playable !== undefined) {
-                localVarQueryParameter['playable'] = playable;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (related !== undefined) {
-                localVarQueryParameter['related'] = related;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-            if (tag) {
-                localVarQueryParameter['tag'] = tag;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {Album} album 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsMutationsCreate: async (id: number, album: Album, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling albumsMutationsCreate.');
-            }
-            // verify required parameter 'album' is not null or undefined
-            if (album === null || album === undefined) {
-                throw new RequiredError('album','Required parameter album was null or undefined when calling albumsMutationsCreate.');
-            }
-            const localVarPath = `/api/v1/albums/{id}/mutations/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof album !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(album !== undefined ? album : {}) : (album || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsMutationsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling albumsMutationsRetrieve.');
-            }
-            const localVarPath = `/api/v1/albums/{id}/mutations/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling albumsRetrieve.');
-            }
-            const localVarPath = `/api/v1/albums/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * AlbumsApi - functional programming interface
- * @export
- */
-export const AlbumsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {AlbumCreate} albumCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsCreate(albumCreate: AlbumCreate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<AlbumCreate>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsCreate(albumCreate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {Album} album 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsFetchesCreate(id: number, album: Album, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Album>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsFetchesCreate(id, album, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsFetchesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Album>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsFetchesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsLibrariesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Album>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsLibrariesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} [artist] 
-         * @param {string} [channel] 
-         * @param {string} [contentCategory] 
-         * @param {boolean} [hidden] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mbid] 
-         * @param {Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsList(artist?: number, channel?: string, contentCategory?: string, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, ordering?: Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedAlbumList>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsList(artist, channel, contentCategory, hidden, includeChannels, library, mbid, ordering, page, pageSize, playable, q, related, scope, tag, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {Album} album 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsMutationsCreate(id: number, album: Album, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Album>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsMutationsCreate(id, album, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsMutationsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Album>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsMutationsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async albumsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Album>> {
-            const localVarAxiosArgs = await AlbumsApiAxiosParamCreator(configuration).albumsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * AlbumsApi - factory interface
- * @export
- */
-export const AlbumsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {AlbumCreate} albumCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsCreate(albumCreate: AlbumCreate, options?: any): AxiosPromise<AlbumCreate> {
-            return AlbumsApiFp(configuration).albumsCreate(albumCreate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsDestroy(id: number, options?: any): AxiosPromise<void> {
-            return AlbumsApiFp(configuration).albumsDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {Album} album 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsFetchesCreate(id: number, album: Album, options?: any): AxiosPromise<Album> {
-            return AlbumsApiFp(configuration).albumsFetchesCreate(id, album, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsFetchesRetrieve(id: number, options?: any): AxiosPromise<Album> {
-            return AlbumsApiFp(configuration).albumsFetchesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsLibrariesRetrieve(id: number, options?: any): AxiosPromise<Album> {
-            return AlbumsApiFp(configuration).albumsLibrariesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} [artist] 
-         * @param {string} [channel] 
-         * @param {string} [contentCategory] 
-         * @param {boolean} [hidden] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mbid] 
-         * @param {Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsList(artist?: number, channel?: string, contentCategory?: string, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, ordering?: Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options?: any): AxiosPromise<PaginatedAlbumList> {
-            return AlbumsApiFp(configuration).albumsList(artist, channel, contentCategory, hidden, includeChannels, library, mbid, ordering, page, pageSize, playable, q, related, scope, tag, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {Album} album 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsMutationsCreate(id: number, album: Album, options?: any): AxiosPromise<Album> {
-            return AlbumsApiFp(configuration).albumsMutationsCreate(id, album, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsMutationsRetrieve(id: number, options?: any): AxiosPromise<Album> {
-            return AlbumsApiFp(configuration).albumsMutationsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        albumsRetrieve(id: number, options?: any): AxiosPromise<Album> {
-            return AlbumsApiFp(configuration).albumsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * AlbumsApi - object-oriented interface
- * @export
- * @class AlbumsApi
- * @extends {BaseAPI}
- */
-export class AlbumsApi extends BaseAPI {
-    /**
-     * 
-     * @param {AlbumCreate} albumCreate 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsCreate(albumCreate: AlbumCreate, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsCreate(albumCreate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsDestroy(id: number, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {Album} album 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsFetchesCreate(id: number, album: Album, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsFetchesCreate(id, album, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsFetchesRetrieve(id: number, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsFetchesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsLibrariesRetrieve(id: number, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsLibrariesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} [artist] 
-     * @param {string} [channel] 
-     * @param {string} [contentCategory] 
-     * @param {boolean} [hidden] 
-     * @param {boolean} [includeChannels] 
-     * @param {string} [library] 
-     * @param {string} [mbid] 
-     * @param {Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>} [ordering] Ordering
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {boolean} [playable] 
-     * @param {string} [q] 
-     * @param {string} [related] 
-     * @param {string} [scope] 
-     * @param {Array<string>} [tag] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsList(artist?: number, channel?: string, contentCategory?: string, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, ordering?: Array<'-artist__modification_date' | '-creation_date' | '-random' | '-related' | '-release_date' | '-title' | 'artist__modification_date' | 'creation_date' | 'random' | 'related' | 'release_date' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsList(artist, channel, contentCategory, hidden, includeChannels, library, mbid, ordering, page, pageSize, playable, q, related, scope, tag, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {Album} album 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsMutationsCreate(id: number, album: Album, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsMutationsCreate(id, album, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsMutationsRetrieve(id: number, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsMutationsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AlbumsApi
-     */
-    public albumsRetrieve(id: number, options?: any) {
-        return AlbumsApiFp(this.configuration).albumsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/artists-api.ts b/api/artists-api.ts
deleted file mode 100644
index 686234bb01fc82864e4880da329ea119e3dd4485..0000000000000000000000000000000000000000
--- a/api/artists-api.ts
+++ /dev/null
@@ -1,820 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { ArtistWithAlbums } from '../types';
-// @ts-ignore
-import { PaginatedArtistWithAlbumsList } from '../types';
-/**
- * ArtistsApi - axios parameter creator
- * @export
- */
-export const ArtistsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {ArtistWithAlbums} artistWithAlbums 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsFetchesCreate: async (id: number, artistWithAlbums: ArtistWithAlbums, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling artistsFetchesCreate.');
-            }
-            // verify required parameter 'artistWithAlbums' is not null or undefined
-            if (artistWithAlbums === null || artistWithAlbums === undefined) {
-                throw new RequiredError('artistWithAlbums','Required parameter artistWithAlbums was null or undefined when calling artistsFetchesCreate.');
-            }
-            const localVarPath = `/api/v1/artists/{id}/fetches/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof artistWithAlbums !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(artistWithAlbums !== undefined ? artistWithAlbums : {}) : (artistWithAlbums || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsFetchesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling artistsFetchesRetrieve.');
-            }
-            const localVarPath = `/api/v1/artists/{id}/fetches/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsLibrariesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling artistsLibrariesRetrieve.');
-            }
-            const localVarPath = `/api/v1/artists/{id}/libraries/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [contentCategory] 
-         * @param {boolean} [hasAlbums] 
-         * @param {boolean} [hidden] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mbid] 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [nameIexact] 
-         * @param {string} [nameStartswith] 
-         * @param {Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsList: async (contentCategory?: string, hasAlbums?: boolean, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/artists/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (contentCategory !== undefined) {
-                localVarQueryParameter['content_category'] = contentCategory;
-            }
-
-            if (hasAlbums !== undefined) {
-                localVarQueryParameter['has_albums'] = hasAlbums;
-            }
-
-            if (hidden !== undefined) {
-                localVarQueryParameter['hidden'] = hidden;
-            }
-
-            if (includeChannels !== undefined) {
-                localVarQueryParameter['include_channels'] = includeChannels;
-            }
-
-            if (library !== undefined) {
-                localVarQueryParameter['library'] = library;
-            }
-
-            if (mbid !== undefined) {
-                localVarQueryParameter['mbid'] = mbid;
-            }
-
-            if (name !== undefined) {
-                localVarQueryParameter['name'] = name;
-            }
-
-            if (nameIcontains !== undefined) {
-                localVarQueryParameter['name__icontains'] = nameIcontains;
-            }
-
-            if (nameIexact !== undefined) {
-                localVarQueryParameter['name__iexact'] = nameIexact;
-            }
-
-            if (nameStartswith !== undefined) {
-                localVarQueryParameter['name__startswith'] = nameStartswith;
-            }
-
-            if (ordering) {
-                localVarQueryParameter['ordering'] = ordering.join(COLLECTION_FORMATS.csv);
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (playable !== undefined) {
-                localVarQueryParameter['playable'] = playable;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (related !== undefined) {
-                localVarQueryParameter['related'] = related;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-            if (tag) {
-                localVarQueryParameter['tag'] = tag;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {ArtistWithAlbums} artistWithAlbums 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsMutationsCreate: async (id: number, artistWithAlbums: ArtistWithAlbums, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling artistsMutationsCreate.');
-            }
-            // verify required parameter 'artistWithAlbums' is not null or undefined
-            if (artistWithAlbums === null || artistWithAlbums === undefined) {
-                throw new RequiredError('artistWithAlbums','Required parameter artistWithAlbums was null or undefined when calling artistsMutationsCreate.');
-            }
-            const localVarPath = `/api/v1/artists/{id}/mutations/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof artistWithAlbums !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(artistWithAlbums !== undefined ? artistWithAlbums : {}) : (artistWithAlbums || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsMutationsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling artistsMutationsRetrieve.');
-            }
-            const localVarPath = `/api/v1/artists/{id}/mutations/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling artistsRetrieve.');
-            }
-            const localVarPath = `/api/v1/artists/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * ArtistsApi - functional programming interface
- * @export
- */
-export const ArtistsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {ArtistWithAlbums} artistWithAlbums 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async artistsFetchesCreate(id: number, artistWithAlbums: ArtistWithAlbums, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ArtistWithAlbums>> {
-            const localVarAxiosArgs = await ArtistsApiAxiosParamCreator(configuration).artistsFetchesCreate(id, artistWithAlbums, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async artistsFetchesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ArtistWithAlbums>> {
-            const localVarAxiosArgs = await ArtistsApiAxiosParamCreator(configuration).artistsFetchesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async artistsLibrariesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ArtistWithAlbums>> {
-            const localVarAxiosArgs = await ArtistsApiAxiosParamCreator(configuration).artistsLibrariesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [contentCategory] 
-         * @param {boolean} [hasAlbums] 
-         * @param {boolean} [hidden] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mbid] 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [nameIexact] 
-         * @param {string} [nameStartswith] 
-         * @param {Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async artistsList(contentCategory?: string, hasAlbums?: boolean, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedArtistWithAlbumsList>> {
-            const localVarAxiosArgs = await ArtistsApiAxiosParamCreator(configuration).artistsList(contentCategory, hasAlbums, hidden, includeChannels, library, mbid, name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, playable, q, related, scope, tag, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {ArtistWithAlbums} artistWithAlbums 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async artistsMutationsCreate(id: number, artistWithAlbums: ArtistWithAlbums, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ArtistWithAlbums>> {
-            const localVarAxiosArgs = await ArtistsApiAxiosParamCreator(configuration).artistsMutationsCreate(id, artistWithAlbums, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async artistsMutationsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ArtistWithAlbums>> {
-            const localVarAxiosArgs = await ArtistsApiAxiosParamCreator(configuration).artistsMutationsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async artistsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ArtistWithAlbums>> {
-            const localVarAxiosArgs = await ArtistsApiAxiosParamCreator(configuration).artistsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * ArtistsApi - factory interface
- * @export
- */
-export const ArtistsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {ArtistWithAlbums} artistWithAlbums 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsFetchesCreate(id: number, artistWithAlbums: ArtistWithAlbums, options?: any): AxiosPromise<ArtistWithAlbums> {
-            return ArtistsApiFp(configuration).artistsFetchesCreate(id, artistWithAlbums, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsFetchesRetrieve(id: number, options?: any): AxiosPromise<ArtistWithAlbums> {
-            return ArtistsApiFp(configuration).artistsFetchesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsLibrariesRetrieve(id: number, options?: any): AxiosPromise<ArtistWithAlbums> {
-            return ArtistsApiFp(configuration).artistsLibrariesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [contentCategory] 
-         * @param {boolean} [hasAlbums] 
-         * @param {boolean} [hidden] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mbid] 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [nameIexact] 
-         * @param {string} [nameStartswith] 
-         * @param {Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsList(contentCategory?: string, hasAlbums?: boolean, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options?: any): AxiosPromise<PaginatedArtistWithAlbumsList> {
-            return ArtistsApiFp(configuration).artistsList(contentCategory, hasAlbums, hidden, includeChannels, library, mbid, name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, playable, q, related, scope, tag, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {ArtistWithAlbums} artistWithAlbums 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsMutationsCreate(id: number, artistWithAlbums: ArtistWithAlbums, options?: any): AxiosPromise<ArtistWithAlbums> {
-            return ArtistsApiFp(configuration).artistsMutationsCreate(id, artistWithAlbums, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsMutationsRetrieve(id: number, options?: any): AxiosPromise<ArtistWithAlbums> {
-            return ArtistsApiFp(configuration).artistsMutationsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        artistsRetrieve(id: number, options?: any): AxiosPromise<ArtistWithAlbums> {
-            return ArtistsApiFp(configuration).artistsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * ArtistsApi - object-oriented interface
- * @export
- * @class ArtistsApi
- * @extends {BaseAPI}
- */
-export class ArtistsApi extends BaseAPI {
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {ArtistWithAlbums} artistWithAlbums 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ArtistsApi
-     */
-    public artistsFetchesCreate(id: number, artistWithAlbums: ArtistWithAlbums, options?: any) {
-        return ArtistsApiFp(this.configuration).artistsFetchesCreate(id, artistWithAlbums, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ArtistsApi
-     */
-    public artistsFetchesRetrieve(id: number, options?: any) {
-        return ArtistsApiFp(this.configuration).artistsFetchesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ArtistsApi
-     */
-    public artistsLibrariesRetrieve(id: number, options?: any) {
-        return ArtistsApiFp(this.configuration).artistsLibrariesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [contentCategory] 
-     * @param {boolean} [hasAlbums] 
-     * @param {boolean} [hidden] 
-     * @param {boolean} [includeChannels] 
-     * @param {string} [library] 
-     * @param {string} [mbid] 
-     * @param {string} [name] 
-     * @param {string} [nameIcontains] 
-     * @param {string} [nameIexact] 
-     * @param {string} [nameStartswith] 
-     * @param {Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>} [ordering] Ordering
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {boolean} [playable] 
-     * @param {string} [q] 
-     * @param {string} [related] 
-     * @param {string} [scope] 
-     * @param {Array<string>} [tag] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ArtistsApi
-     */
-    public artistsList(contentCategory?: string, hasAlbums?: boolean, hidden?: boolean, includeChannels?: boolean, library?: string, mbid?: string, name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-id' | '-modification_date' | '-name' | '-random' | '-related' | 'creation_date' | 'id' | 'modification_date' | 'name' | 'random' | 'related'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, options?: any) {
-        return ArtistsApiFp(this.configuration).artistsList(contentCategory, hasAlbums, hidden, includeChannels, library, mbid, name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, playable, q, related, scope, tag, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {ArtistWithAlbums} artistWithAlbums 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ArtistsApi
-     */
-    public artistsMutationsCreate(id: number, artistWithAlbums: ArtistWithAlbums, options?: any) {
-        return ArtistsApiFp(this.configuration).artistsMutationsCreate(id, artistWithAlbums, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ArtistsApi
-     */
-    public artistsMutationsRetrieve(id: number, options?: any) {
-        return ArtistsApiFp(this.configuration).artistsMutationsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ArtistsApi
-     */
-    public artistsRetrieve(id: number, options?: any) {
-        return ArtistsApiFp(this.configuration).artistsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/attachments-api.ts b/api/attachments-api.ts
deleted file mode 100644
index e2416817d2048fea762e277ea645db1fdfaa7511..0000000000000000000000000000000000000000
--- a/api/attachments-api.ts
+++ /dev/null
@@ -1,386 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Attachment } from '../types';
-/**
- * AttachmentsApi - axios parameter creator
- * @export
- */
-export const AttachmentsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {Attachment} attachment 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsCreate: async (attachment: Attachment, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'attachment' is not null or undefined
-            if (attachment === null || attachment === undefined) {
-                throw new RequiredError('attachment','Required parameter attachment was null or undefined when calling attachmentsCreate.');
-            }
-            const localVarPath = `/api/v1/attachments/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof attachment !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(attachment !== undefined ? attachment : {}) : (attachment || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling attachmentsDestroy.');
-            }
-            const localVarPath = `/api/v1/attachments/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsProxyRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling attachmentsProxyRetrieve.');
-            }
-            const localVarPath = `/api/v1/attachments/{uuid}/proxy/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling attachmentsRetrieve.');
-            }
-            const localVarPath = `/api/v1/attachments/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * AttachmentsApi - functional programming interface
- * @export
- */
-export const AttachmentsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {Attachment} attachment 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async attachmentsCreate(attachment: Attachment, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Attachment>> {
-            const localVarAxiosArgs = await AttachmentsApiAxiosParamCreator(configuration).attachmentsCreate(attachment, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async attachmentsDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await AttachmentsApiAxiosParamCreator(configuration).attachmentsDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async attachmentsProxyRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Attachment>> {
-            const localVarAxiosArgs = await AttachmentsApiAxiosParamCreator(configuration).attachmentsProxyRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async attachmentsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Attachment>> {
-            const localVarAxiosArgs = await AttachmentsApiAxiosParamCreator(configuration).attachmentsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * AttachmentsApi - factory interface
- * @export
- */
-export const AttachmentsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {Attachment} attachment 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsCreate(attachment: Attachment, options?: any): AxiosPromise<Attachment> {
-            return AttachmentsApiFp(configuration).attachmentsCreate(attachment, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return AttachmentsApiFp(configuration).attachmentsDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsProxyRetrieve(uuid: string, options?: any): AxiosPromise<Attachment> {
-            return AttachmentsApiFp(configuration).attachmentsProxyRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        attachmentsRetrieve(uuid: string, options?: any): AxiosPromise<Attachment> {
-            return AttachmentsApiFp(configuration).attachmentsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * AttachmentsApi - object-oriented interface
- * @export
- * @class AttachmentsApi
- * @extends {BaseAPI}
- */
-export class AttachmentsApi extends BaseAPI {
-    /**
-     * 
-     * @param {Attachment} attachment 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AttachmentsApi
-     */
-    public attachmentsCreate(attachment: Attachment, options?: any) {
-        return AttachmentsApiFp(this.configuration).attachmentsCreate(attachment, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AttachmentsApi
-     */
-    public attachmentsDestroy(uuid: string, options?: any) {
-        return AttachmentsApiFp(this.configuration).attachmentsDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AttachmentsApi
-     */
-    public attachmentsProxyRetrieve(uuid: string, options?: any) {
-        return AttachmentsApiFp(this.configuration).attachmentsProxyRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AttachmentsApi
-     */
-    public attachmentsRetrieve(uuid: string, options?: any) {
-        return AttachmentsApiFp(this.configuration).attachmentsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/auth-api.ts b/api/auth-api.ts
deleted file mode 100644
index b956a0e2bd4c1d7d5a8349baf59e07bdb4e9f1be..0000000000000000000000000000000000000000
--- a/api/auth-api.ts
+++ /dev/null
@@ -1,854 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PasswordChange } from '../types';
-// @ts-ignore
-import { PasswordReset } from '../types';
-// @ts-ignore
-import { PasswordResetConfirm } from '../types';
-// @ts-ignore
-import { PatchedUserDetails } from '../types';
-// @ts-ignore
-import { Register } from '../types';
-// @ts-ignore
-import { UserDetails } from '../types';
-// @ts-ignore
-import { VerifyEmail } from '../types';
-/**
- * AuthApi - axios parameter creator
- * @export
- */
-export const AuthApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordChange} passwordChange 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authPasswordChangeCreate: async (passwordChange: PasswordChange, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'passwordChange' is not null or undefined
-            if (passwordChange === null || passwordChange === undefined) {
-                throw new RequiredError('passwordChange','Required parameter passwordChange was null or undefined when calling authPasswordChangeCreate.');
-            }
-            const localVarPath = `/api/v1/auth/password/change/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof passwordChange !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(passwordChange !== undefined ? passwordChange : {}) : (passwordChange || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Password reset e-mail link is confirmed, therefore this resets the user\'s password.  Accepts the following POST parameters: token, uid,     new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordResetConfirm} passwordResetConfirm 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authPasswordResetConfirmCreate: async (passwordResetConfirm: PasswordResetConfirm, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'passwordResetConfirm' is not null or undefined
-            if (passwordResetConfirm === null || passwordResetConfirm === undefined) {
-                throw new RequiredError('passwordResetConfirm','Required parameter passwordResetConfirm was null or undefined when calling authPasswordResetConfirmCreate.');
-            }
-            const localVarPath = `/api/v1/auth/password/reset/confirm/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof passwordResetConfirm !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(passwordResetConfirm !== undefined ? passwordResetConfirm : {}) : (passwordResetConfirm || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Calls Django Auth PasswordResetForm save method.  Accepts the following POST parameters: email Returns the success/fail message.
-         * @param {PasswordReset} passwordReset 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authPasswordResetCreate: async (passwordReset: PasswordReset, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'passwordReset' is not null or undefined
-            if (passwordReset === null || passwordReset === undefined) {
-                throw new RequiredError('passwordReset','Required parameter passwordReset was null or undefined when calling authPasswordResetCreate.');
-            }
-            const localVarPath = `/api/v1/auth/password/reset/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof passwordReset !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(passwordReset !== undefined ? passwordReset : {}) : (passwordReset || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordChange} passwordChange 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authRegistrationChangePasswordCreate: async (passwordChange: PasswordChange, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'passwordChange' is not null or undefined
-            if (passwordChange === null || passwordChange === undefined) {
-                throw new RequiredError('passwordChange','Required parameter passwordChange was null or undefined when calling authRegistrationChangePasswordCreate.');
-            }
-            const localVarPath = `/api/v1/auth/registration/change-password/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof passwordChange !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(passwordChange !== undefined ? passwordChange : {}) : (passwordChange || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {Register} register 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authRegistrationCreate: async (register: Register, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'register' is not null or undefined
-            if (register === null || register === undefined) {
-                throw new RequiredError('register','Required parameter register was null or undefined when calling authRegistrationCreate.');
-            }
-            const localVarPath = `/api/v1/auth/registration/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof register !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(register !== undefined ? register : {}) : (register || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {VerifyEmail} verifyEmail 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authRegistrationVerifyEmailCreate: async (verifyEmail: VerifyEmail, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'verifyEmail' is not null or undefined
-            if (verifyEmail === null || verifyEmail === undefined) {
-                throw new RequiredError('verifyEmail','Required parameter verifyEmail was null or undefined when calling authRegistrationVerifyEmailCreate.');
-            }
-            const localVarPath = `/api/v1/auth/registration/verify-email/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof verifyEmail !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(verifyEmail !== undefined ? verifyEmail : {}) : (verifyEmail || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {PatchedUserDetails} [patchedUserDetails] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authUserPartialUpdate: async (patchedUserDetails?: PatchedUserDetails, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/auth/user/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedUserDetails !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedUserDetails !== undefined ? patchedUserDetails : {}) : (patchedUserDetails || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authUserRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/auth/user/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {UserDetails} userDetails 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authUserUpdate: async (userDetails: UserDetails, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userDetails' is not null or undefined
-            if (userDetails === null || userDetails === undefined) {
-                throw new RequiredError('userDetails','Required parameter userDetails was null or undefined when calling authUserUpdate.');
-            }
-            const localVarPath = `/api/v1/auth/user/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userDetails !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userDetails !== undefined ? userDetails : {}) : (userDetails || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * AuthApi - functional programming interface
- * @export
- */
-export const AuthApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordChange} passwordChange 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authPasswordChangeCreate(passwordChange: PasswordChange, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PasswordChange>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authPasswordChangeCreate(passwordChange, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Password reset e-mail link is confirmed, therefore this resets the user\'s password.  Accepts the following POST parameters: token, uid,     new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordResetConfirm} passwordResetConfirm 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authPasswordResetConfirmCreate(passwordResetConfirm: PasswordResetConfirm, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PasswordResetConfirm>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authPasswordResetConfirmCreate(passwordResetConfirm, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Calls Django Auth PasswordResetForm save method.  Accepts the following POST parameters: email Returns the success/fail message.
-         * @param {PasswordReset} passwordReset 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authPasswordResetCreate(passwordReset: PasswordReset, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PasswordReset>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authPasswordResetCreate(passwordReset, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordChange} passwordChange 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authRegistrationChangePasswordCreate(passwordChange: PasswordChange, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PasswordChange>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authRegistrationChangePasswordCreate(passwordChange, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {Register} register 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authRegistrationCreate(register: Register, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Register>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authRegistrationCreate(register, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {VerifyEmail} verifyEmail 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authRegistrationVerifyEmailCreate(verifyEmail: VerifyEmail, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<VerifyEmail>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authRegistrationVerifyEmailCreate(verifyEmail, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {PatchedUserDetails} [patchedUserDetails] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authUserPartialUpdate(patchedUserDetails?: PatchedUserDetails, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserDetails>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authUserPartialUpdate(patchedUserDetails, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authUserRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserDetails>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authUserRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {UserDetails} userDetails 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async authUserUpdate(userDetails: UserDetails, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserDetails>> {
-            const localVarAxiosArgs = await AuthApiAxiosParamCreator(configuration).authUserUpdate(userDetails, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * AuthApi - factory interface
- * @export
- */
-export const AuthApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordChange} passwordChange 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authPasswordChangeCreate(passwordChange: PasswordChange, options?: any): AxiosPromise<PasswordChange> {
-            return AuthApiFp(configuration).authPasswordChangeCreate(passwordChange, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Password reset e-mail link is confirmed, therefore this resets the user\'s password.  Accepts the following POST parameters: token, uid,     new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordResetConfirm} passwordResetConfirm 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authPasswordResetConfirmCreate(passwordResetConfirm: PasswordResetConfirm, options?: any): AxiosPromise<PasswordResetConfirm> {
-            return AuthApiFp(configuration).authPasswordResetConfirmCreate(passwordResetConfirm, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Calls Django Auth PasswordResetForm save method.  Accepts the following POST parameters: email Returns the success/fail message.
-         * @param {PasswordReset} passwordReset 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authPasswordResetCreate(passwordReset: PasswordReset, options?: any): AxiosPromise<PasswordReset> {
-            return AuthApiFp(configuration).authPasswordResetCreate(passwordReset, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-         * @param {PasswordChange} passwordChange 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authRegistrationChangePasswordCreate(passwordChange: PasswordChange, options?: any): AxiosPromise<PasswordChange> {
-            return AuthApiFp(configuration).authRegistrationChangePasswordCreate(passwordChange, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {Register} register 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authRegistrationCreate(register: Register, options?: any): AxiosPromise<Register> {
-            return AuthApiFp(configuration).authRegistrationCreate(register, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {VerifyEmail} verifyEmail 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authRegistrationVerifyEmailCreate(verifyEmail: VerifyEmail, options?: any): AxiosPromise<VerifyEmail> {
-            return AuthApiFp(configuration).authRegistrationVerifyEmailCreate(verifyEmail, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {PatchedUserDetails} [patchedUserDetails] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authUserPartialUpdate(patchedUserDetails?: PatchedUserDetails, options?: any): AxiosPromise<UserDetails> {
-            return AuthApiFp(configuration).authUserPartialUpdate(patchedUserDetails, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authUserRetrieve(options?: any): AxiosPromise<UserDetails> {
-            return AuthApiFp(configuration).authUserRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-         * @param {UserDetails} userDetails 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        authUserUpdate(userDetails: UserDetails, options?: any): AxiosPromise<UserDetails> {
-            return AuthApiFp(configuration).authUserUpdate(userDetails, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * AuthApi - object-oriented interface
- * @export
- * @class AuthApi
- * @extends {BaseAPI}
- */
-export class AuthApi extends BaseAPI {
-    /**
-     * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-     * @param {PasswordChange} passwordChange 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authPasswordChangeCreate(passwordChange: PasswordChange, options?: any) {
-        return AuthApiFp(this.configuration).authPasswordChangeCreate(passwordChange, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Password reset e-mail link is confirmed, therefore this resets the user\'s password.  Accepts the following POST parameters: token, uid,     new_password1, new_password2 Returns the success/fail message.
-     * @param {PasswordResetConfirm} passwordResetConfirm 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authPasswordResetConfirmCreate(passwordResetConfirm: PasswordResetConfirm, options?: any) {
-        return AuthApiFp(this.configuration).authPasswordResetConfirmCreate(passwordResetConfirm, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Calls Django Auth PasswordResetForm save method.  Accepts the following POST parameters: email Returns the success/fail message.
-     * @param {PasswordReset} passwordReset 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authPasswordResetCreate(passwordReset: PasswordReset, options?: any) {
-        return AuthApiFp(this.configuration).authPasswordResetCreate(passwordReset, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Calls Django Auth SetPasswordForm save method.  Accepts the following POST parameters: new_password1, new_password2 Returns the success/fail message.
-     * @param {PasswordChange} passwordChange 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authRegistrationChangePasswordCreate(passwordChange: PasswordChange, options?: any) {
-        return AuthApiFp(this.configuration).authRegistrationChangePasswordCreate(passwordChange, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {Register} register 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authRegistrationCreate(register: Register, options?: any) {
-        return AuthApiFp(this.configuration).authRegistrationCreate(register, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {VerifyEmail} verifyEmail 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authRegistrationVerifyEmailCreate(verifyEmail: VerifyEmail, options?: any) {
-        return AuthApiFp(this.configuration).authRegistrationVerifyEmailCreate(verifyEmail, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-     * @param {PatchedUserDetails} [patchedUserDetails] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authUserPartialUpdate(patchedUserDetails?: PatchedUserDetails, options?: any) {
-        return AuthApiFp(this.configuration).authUserPartialUpdate(patchedUserDetails, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authUserRetrieve(options?: any) {
-        return AuthApiFp(this.configuration).authUserRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Reads and updates UserModel fields Accepts GET, PUT, PATCH methods.  Default accepted fields: username, first_name, last_name Default display fields: pk, username, email, first_name, last_name Read-only fields: pk, email  Returns UserModel fields.
-     * @param {UserDetails} userDetails 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof AuthApi
-     */
-    public authUserUpdate(userDetails: UserDetails, options?: any) {
-        return AuthApiFp(this.configuration).authUserUpdate(userDetails, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/channels-api.ts b/api/channels-api.ts
deleted file mode 100644
index 28230d1ccb3a404adb5bf22baa2e3dcba1f9ac91..0000000000000000000000000000000000000000
--- a/api/channels-api.ts
+++ /dev/null
@@ -1,1201 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Channel } from '../types';
-// @ts-ignore
-import { ChannelCreate } from '../types';
-// @ts-ignore
-import { ChannelUpdate } from '../types';
-// @ts-ignore
-import { PaginatedChannelList } from '../types';
-// @ts-ignore
-import { PatchedChannelUpdate } from '../types';
-/**
- * ChannelsApi - axios parameter creator
- * @export
- */
-export const ChannelsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsCreate: async (channelCreate: ChannelCreate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'channelCreate' is not null or undefined
-            if (channelCreate === null || channelCreate === undefined) {
-                throw new RequiredError('channelCreate','Required parameter channelCreate was null or undefined when calling channelsCreate.');
-            }
-            const localVarPath = `/api/v1/channels/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof channelCreate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(channelCreate !== undefined ? channelCreate : {}) : (channelCreate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsDestroy: async (composite: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsDestroy.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [external] 
-         * @param {boolean} [hidden] 
-         * @param {Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {boolean} [subscribed] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsList: async (external?: boolean, hidden?: boolean, ordering?: Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>, page?: number, pageSize?: number, q?: string, scope?: string, subscribed?: boolean, tag?: Array<string>, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/channels/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (external !== undefined) {
-                localVarQueryParameter['external'] = external;
-            }
-
-            if (hidden !== undefined) {
-                localVarQueryParameter['hidden'] = hidden;
-            }
-
-            if (ordering) {
-                localVarQueryParameter['ordering'] = ordering.join(COLLECTION_FORMATS.csv);
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-            if (subscribed !== undefined) {
-                localVarQueryParameter['subscribed'] = subscribed;
-            }
-
-            if (tag) {
-                localVarQueryParameter['tag'] = tag;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsMetadataChoicesRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/channels/metadata-choices/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {PatchedChannelUpdate} [patchedChannelUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsPartialUpdate: async (composite: string, patchedChannelUpdate?: PatchedChannelUpdate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedChannelUpdate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedChannelUpdate !== undefined ? patchedChannelUpdate : {}) : (patchedChannelUpdate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsRetrieve: async (composite: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsRetrieve.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsRssRetrieve: async (composite: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsRssRetrieve.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/rss/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsRssSubscribeCreate: async (channelCreate: ChannelCreate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'channelCreate' is not null or undefined
-            if (channelCreate === null || channelCreate === undefined) {
-                throw new RequiredError('channelCreate','Required parameter channelCreate was null or undefined when calling channelsRssSubscribeCreate.');
-            }
-            const localVarPath = `/api/v1/channels/rss-subscribe/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof channelCreate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(channelCreate !== undefined ? channelCreate : {}) : (channelCreate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsSubscribeCreate: async (composite: string, channelCreate: ChannelCreate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsSubscribeCreate.');
-            }
-            // verify required parameter 'channelCreate' is not null or undefined
-            if (channelCreate === null || channelCreate === undefined) {
-                throw new RequiredError('channelCreate','Required parameter channelCreate was null or undefined when calling channelsSubscribeCreate.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/subscribe/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof channelCreate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(channelCreate !== undefined ? channelCreate : {}) : (channelCreate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsUnsubscribeCreate: async (composite: string, channelCreate: ChannelCreate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsUnsubscribeCreate.');
-            }
-            // verify required parameter 'channelCreate' is not null or undefined
-            if (channelCreate === null || channelCreate === undefined) {
-                throw new RequiredError('channelCreate','Required parameter channelCreate was null or undefined when calling channelsUnsubscribeCreate.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/unsubscribe/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof channelCreate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(channelCreate !== undefined ? channelCreate : {}) : (channelCreate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsUnsubscribeDestroy: async (composite: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsUnsubscribeDestroy.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/unsubscribe/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelUpdate} channelUpdate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsUpdate: async (composite: string, channelUpdate: ChannelUpdate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling channelsUpdate.');
-            }
-            // verify required parameter 'channelUpdate' is not null or undefined
-            if (channelUpdate === null || channelUpdate === undefined) {
-                throw new RequiredError('channelUpdate','Required parameter channelUpdate was null or undefined when calling channelsUpdate.');
-            }
-            const localVarPath = `/api/v1/channels/{composite}/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof channelUpdate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(channelUpdate !== undefined ? channelUpdate : {}) : (channelUpdate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * ChannelsApi - functional programming interface
- * @export
- */
-export const ChannelsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsCreate(channelCreate: ChannelCreate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ChannelCreate>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsCreate(channelCreate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsDestroy(composite: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsDestroy(composite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [external] 
-         * @param {boolean} [hidden] 
-         * @param {Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {boolean} [subscribed] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsList(external?: boolean, hidden?: boolean, ordering?: Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>, page?: number, pageSize?: number, q?: string, scope?: string, subscribed?: boolean, tag?: Array<string>, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedChannelList>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsList(external, hidden, ordering, page, pageSize, q, scope, subscribed, tag, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsMetadataChoicesRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Channel>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsMetadataChoicesRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {PatchedChannelUpdate} [patchedChannelUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsPartialUpdate(composite: string, patchedChannelUpdate?: PatchedChannelUpdate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ChannelUpdate>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsPartialUpdate(composite, patchedChannelUpdate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsRetrieve(composite: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Channel>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsRetrieve(composite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsRssRetrieve(composite: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Channel>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsRssRetrieve(composite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsRssSubscribeCreate(channelCreate: ChannelCreate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ChannelCreate>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsRssSubscribeCreate(channelCreate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsSubscribeCreate(composite: string, channelCreate: ChannelCreate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ChannelCreate>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsSubscribeCreate(composite, channelCreate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsUnsubscribeCreate(composite: string, channelCreate: ChannelCreate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ChannelCreate>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsUnsubscribeCreate(composite, channelCreate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsUnsubscribeDestroy(composite: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsUnsubscribeDestroy(composite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelUpdate} channelUpdate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async channelsUpdate(composite: string, channelUpdate: ChannelUpdate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ChannelUpdate>> {
-            const localVarAxiosArgs = await ChannelsApiAxiosParamCreator(configuration).channelsUpdate(composite, channelUpdate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * ChannelsApi - factory interface
- * @export
- */
-export const ChannelsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsCreate(channelCreate: ChannelCreate, options?: any): AxiosPromise<ChannelCreate> {
-            return ChannelsApiFp(configuration).channelsCreate(channelCreate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsDestroy(composite: string, options?: any): AxiosPromise<void> {
-            return ChannelsApiFp(configuration).channelsDestroy(composite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [external] 
-         * @param {boolean} [hidden] 
-         * @param {Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {boolean} [subscribed] 
-         * @param {Array<string>} [tag] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsList(external?: boolean, hidden?: boolean, ordering?: Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>, page?: number, pageSize?: number, q?: string, scope?: string, subscribed?: boolean, tag?: Array<string>, options?: any): AxiosPromise<PaginatedChannelList> {
-            return ChannelsApiFp(configuration).channelsList(external, hidden, ordering, page, pageSize, q, scope, subscribed, tag, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsMetadataChoicesRetrieve(options?: any): AxiosPromise<Channel> {
-            return ChannelsApiFp(configuration).channelsMetadataChoicesRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {PatchedChannelUpdate} [patchedChannelUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsPartialUpdate(composite: string, patchedChannelUpdate?: PatchedChannelUpdate, options?: any): AxiosPromise<ChannelUpdate> {
-            return ChannelsApiFp(configuration).channelsPartialUpdate(composite, patchedChannelUpdate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsRetrieve(composite: string, options?: any): AxiosPromise<Channel> {
-            return ChannelsApiFp(configuration).channelsRetrieve(composite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsRssRetrieve(composite: string, options?: any): AxiosPromise<Channel> {
-            return ChannelsApiFp(configuration).channelsRssRetrieve(composite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsRssSubscribeCreate(channelCreate: ChannelCreate, options?: any): AxiosPromise<ChannelCreate> {
-            return ChannelsApiFp(configuration).channelsRssSubscribeCreate(channelCreate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsSubscribeCreate(composite: string, channelCreate: ChannelCreate, options?: any): AxiosPromise<ChannelCreate> {
-            return ChannelsApiFp(configuration).channelsSubscribeCreate(composite, channelCreate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelCreate} channelCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsUnsubscribeCreate(composite: string, channelCreate: ChannelCreate, options?: any): AxiosPromise<ChannelCreate> {
-            return ChannelsApiFp(configuration).channelsUnsubscribeCreate(composite, channelCreate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsUnsubscribeDestroy(composite: string, options?: any): AxiosPromise<void> {
-            return ChannelsApiFp(configuration).channelsUnsubscribeDestroy(composite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {ChannelUpdate} channelUpdate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        channelsUpdate(composite: string, channelUpdate: ChannelUpdate, options?: any): AxiosPromise<ChannelUpdate> {
-            return ChannelsApiFp(configuration).channelsUpdate(composite, channelUpdate, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * ChannelsApi - object-oriented interface
- * @export
- * @class ChannelsApi
- * @extends {BaseAPI}
- */
-export class ChannelsApi extends BaseAPI {
-    /**
-     * 
-     * @param {ChannelCreate} channelCreate 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsCreate(channelCreate: ChannelCreate, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsCreate(channelCreate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsDestroy(composite: string, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsDestroy(composite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [external] 
-     * @param {boolean} [hidden] 
-     * @param {Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>} [ordering] Ordering
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {string} [scope] 
-     * @param {boolean} [subscribed] 
-     * @param {Array<string>} [tag] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsList(external?: boolean, hidden?: boolean, ordering?: Array<'-creation_date' | '-modification_date' | '-random' | 'creation_date' | 'modification_date' | 'random'>, page?: number, pageSize?: number, q?: string, scope?: string, subscribed?: boolean, tag?: Array<string>, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsList(external, hidden, ordering, page, pageSize, q, scope, subscribed, tag, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsMetadataChoicesRetrieve(options?: any) {
-        return ChannelsApiFp(this.configuration).channelsMetadataChoicesRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {PatchedChannelUpdate} [patchedChannelUpdate] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsPartialUpdate(composite: string, patchedChannelUpdate?: PatchedChannelUpdate, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsPartialUpdate(composite, patchedChannelUpdate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsRetrieve(composite: string, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsRetrieve(composite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsRssRetrieve(composite: string, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsRssRetrieve(composite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {ChannelCreate} channelCreate 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsRssSubscribeCreate(channelCreate: ChannelCreate, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsRssSubscribeCreate(channelCreate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {ChannelCreate} channelCreate 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsSubscribeCreate(composite: string, channelCreate: ChannelCreate, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsSubscribeCreate(composite, channelCreate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {ChannelCreate} channelCreate 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsUnsubscribeCreate(composite: string, channelCreate: ChannelCreate, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsUnsubscribeCreate(composite, channelCreate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsUnsubscribeDestroy(composite: string, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsUnsubscribeDestroy(composite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {ChannelUpdate} channelUpdate 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ChannelsApi
-     */
-    public channelsUpdate(composite: string, channelUpdate: ChannelUpdate, options?: any) {
-        return ChannelsApiFp(this.configuration).channelsUpdate(composite, channelUpdate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/favorites-api.ts b/api/favorites-api.ts
deleted file mode 100644
index 6e0e4cf9ac819488b29bf83dc0e4f5c8b165a8f0..0000000000000000000000000000000000000000
--- a/api/favorites-api.ts
+++ /dev/null
@@ -1,604 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedUserTrackFavoriteList } from '../types';
-// @ts-ignore
-import { UserTrackFavorite } from '../types';
-// @ts-ignore
-import { UserTrackFavoriteWrite } from '../types';
-/**
- * FavoritesApi - axios parameter creator
- * @export
- */
-export const FavoritesApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * Return all the favorites of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display favorites status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksAllRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/favorites/tracks/all/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksCreate: async (userTrackFavoriteWrite: UserTrackFavoriteWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userTrackFavoriteWrite' is not null or undefined
-            if (userTrackFavoriteWrite === null || userTrackFavoriteWrite === undefined) {
-                throw new RequiredError('userTrackFavoriteWrite','Required parameter userTrackFavoriteWrite was null or undefined when calling favoritesTracksCreate.');
-            }
-            const localVarPath = `/api/v1/favorites/tracks/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userTrackFavoriteWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userTrackFavoriteWrite !== undefined ? userTrackFavoriteWrite : {}) : (userTrackFavoriteWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track favorite.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling favoritesTracksDestroy.');
-            }
-            const localVarPath = `/api/v1/favorites/tracks/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [hidden] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksList: async (hidden?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/favorites/tracks/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (hidden !== undefined) {
-                localVarQueryParameter['hidden'] = hidden;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksRemoveCreate: async (userTrackFavoriteWrite: UserTrackFavoriteWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userTrackFavoriteWrite' is not null or undefined
-            if (userTrackFavoriteWrite === null || userTrackFavoriteWrite === undefined) {
-                throw new RequiredError('userTrackFavoriteWrite','Required parameter userTrackFavoriteWrite was null or undefined when calling favoritesTracksRemoveCreate.');
-            }
-            const localVarPath = `/api/v1/favorites/tracks/remove/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userTrackFavoriteWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userTrackFavoriteWrite !== undefined ? userTrackFavoriteWrite : {}) : (userTrackFavoriteWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksRemoveDestroy: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/favorites/tracks/remove/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * FavoritesApi - functional programming interface
- * @export
- */
-export const FavoritesApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * Return all the favorites of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display favorites status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async favoritesTracksAllRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserTrackFavorite>> {
-            const localVarAxiosArgs = await FavoritesApiAxiosParamCreator(configuration).favoritesTracksAllRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async favoritesTracksCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserTrackFavoriteWrite>> {
-            const localVarAxiosArgs = await FavoritesApiAxiosParamCreator(configuration).favoritesTracksCreate(userTrackFavoriteWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track favorite.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async favoritesTracksDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await FavoritesApiAxiosParamCreator(configuration).favoritesTracksDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [hidden] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async favoritesTracksList(hidden?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedUserTrackFavoriteList>> {
-            const localVarAxiosArgs = await FavoritesApiAxiosParamCreator(configuration).favoritesTracksList(hidden, ordering, page, pageSize, q, scope, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async favoritesTracksRemoveCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserTrackFavoriteWrite>> {
-            const localVarAxiosArgs = await FavoritesApiAxiosParamCreator(configuration).favoritesTracksRemoveCreate(userTrackFavoriteWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async favoritesTracksRemoveDestroy(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await FavoritesApiAxiosParamCreator(configuration).favoritesTracksRemoveDestroy(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * FavoritesApi - factory interface
- * @export
- */
-export const FavoritesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * Return all the favorites of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display favorites status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksAllRetrieve(options?: any): AxiosPromise<UserTrackFavorite> {
-            return FavoritesApiFp(configuration).favoritesTracksAllRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, options?: any): AxiosPromise<UserTrackFavoriteWrite> {
-            return FavoritesApiFp(configuration).favoritesTracksCreate(userTrackFavoriteWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track favorite.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksDestroy(id: number, options?: any): AxiosPromise<void> {
-            return FavoritesApiFp(configuration).favoritesTracksDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [hidden] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksList(hidden?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options?: any): AxiosPromise<PaginatedUserTrackFavoriteList> {
-            return FavoritesApiFp(configuration).favoritesTracksList(hidden, ordering, page, pageSize, q, scope, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksRemoveCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, options?: any): AxiosPromise<UserTrackFavoriteWrite> {
-            return FavoritesApiFp(configuration).favoritesTracksRemoveCreate(userTrackFavoriteWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        favoritesTracksRemoveDestroy(options?: any): AxiosPromise<void> {
-            return FavoritesApiFp(configuration).favoritesTracksRemoveDestroy(options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * FavoritesApi - object-oriented interface
- * @export
- * @class FavoritesApi
- * @extends {BaseAPI}
- */
-export class FavoritesApi extends BaseAPI {
-    /**
-     * Return all the favorites of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display favorites status in the UI
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FavoritesApi
-     */
-    public favoritesTracksAllRetrieve(options?: any) {
-        return FavoritesApiFp(this.configuration).favoritesTracksAllRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FavoritesApi
-     */
-    public favoritesTracksCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, options?: any) {
-        return FavoritesApiFp(this.configuration).favoritesTracksCreate(userTrackFavoriteWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this track favorite.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FavoritesApi
-     */
-    public favoritesTracksDestroy(id: number, options?: any) {
-        return FavoritesApiFp(this.configuration).favoritesTracksDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [hidden] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {string} [scope] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FavoritesApi
-     */
-    public favoritesTracksList(hidden?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options?: any) {
-        return FavoritesApiFp(this.configuration).favoritesTracksList(hidden, ordering, page, pageSize, q, scope, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {UserTrackFavoriteWrite} userTrackFavoriteWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FavoritesApi
-     */
-    public favoritesTracksRemoveCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, options?: any) {
-        return FavoritesApiFp(this.configuration).favoritesTracksRemoveCreate(userTrackFavoriteWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FavoritesApi
-     */
-    public favoritesTracksRemoveDestroy(options?: any) {
-        return FavoritesApiFp(this.configuration).favoritesTracksRemoveDestroy(options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/federation-api.ts b/api/federation-api.ts
deleted file mode 100644
index 6daf4dbb3fa3380a9b7cada1c95108041c157547..0000000000000000000000000000000000000000
--- a/api/federation-api.ts
+++ /dev/null
@@ -1,2025 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Domain } from '../types';
-// @ts-ignore
-import { Fetch } from '../types';
-// @ts-ignore
-import { FullActor } from '../types';
-// @ts-ignore
-import { InboxItem } from '../types';
-// @ts-ignore
-import { Library } from '../types';
-// @ts-ignore
-import { LibraryFollow } from '../types';
-// @ts-ignore
-import { PaginatedDomainList } from '../types';
-// @ts-ignore
-import { PaginatedInboxItemList } from '../types';
-// @ts-ignore
-import { PaginatedLibraryFollowList } from '../types';
-// @ts-ignore
-import { PatchedInboxItem } from '../types';
-/**
- * FederationApi - axios parameter creator
- * @export
- */
-export const FederationApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} fullUsername 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationActorsLibrariesRetrieve: async (fullUsername: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'fullUsername' is not null or undefined
-            if (fullUsername === null || fullUsername === undefined) {
-                throw new RequiredError('fullUsername','Required parameter fullUsername was null or undefined when calling federationActorsLibrariesRetrieve.');
-            }
-            const localVarPath = `/api/v1/federation/actors/{full_username}/libraries/`
-                .replace(`{${"full_username"}}`, encodeURIComponent(String(fullUsername)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} fullUsername 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationActorsRetrieve: async (fullUsername: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'fullUsername' is not null or undefined
-            if (fullUsername === null || fullUsername === undefined) {
-                throw new RequiredError('fullUsername','Required parameter fullUsername was null or undefined when calling federationActorsRetrieve.');
-            }
-            const localVarPath = `/api/v1/federation/actors/{full_username}/`
-                .replace(`{${"full_username"}}`, encodeURIComponent(String(fullUsername)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationDomainsList: async (ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/federation/domains/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationDomainsRetrieve: async (name: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling federationDomainsRetrieve.');
-            }
-            const localVarPath = `/api/v1/federation/domains/{name}/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {Fetch} fetch 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFetchesCreate: async (fetch: Fetch, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'fetch' is not null or undefined
-            if (fetch === null || fetch === undefined) {
-                throw new RequiredError('fetch','Required parameter fetch was null or undefined when calling federationFetchesCreate.');
-            }
-            const localVarPath = `/api/v1/federation/fetches/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof fetch !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(fetch !== undefined ? fetch : {}) : (fetch || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this fetch.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFetchesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling federationFetchesRetrieve.');
-            }
-            const localVarPath = `/api/v1/federation/fetches/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryAcceptCreate: async (uuid: string, libraryFollow: LibraryFollow, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling federationFollowsLibraryAcceptCreate.');
-            }
-            // verify required parameter 'libraryFollow' is not null or undefined
-            if (libraryFollow === null || libraryFollow === undefined) {
-                throw new RequiredError('libraryFollow','Required parameter libraryFollow was null or undefined when calling federationFollowsLibraryAcceptCreate.');
-            }
-            const localVarPath = `/api/v1/federation/follows/library/{uuid}/accept/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof libraryFollow !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(libraryFollow !== undefined ? libraryFollow : {}) : (libraryFollow || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryAllRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/federation/follows/library/all/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryCreate: async (libraryFollow: LibraryFollow, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'libraryFollow' is not null or undefined
-            if (libraryFollow === null || libraryFollow === undefined) {
-                throw new RequiredError('libraryFollow','Required parameter libraryFollow was null or undefined when calling federationFollowsLibraryCreate.');
-            }
-            const localVarPath = `/api/v1/federation/follows/library/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof libraryFollow !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(libraryFollow !== undefined ? libraryFollow : {}) : (libraryFollow || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling federationFollowsLibraryDestroy.');
-            }
-            const localVarPath = `/api/v1/federation/follows/library/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [approved] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryList: async (approved?: boolean, ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/federation/follows/library/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (approved !== undefined) {
-                localVarQueryParameter['approved'] = approved;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryRejectCreate: async (uuid: string, libraryFollow: LibraryFollow, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling federationFollowsLibraryRejectCreate.');
-            }
-            // verify required parameter 'libraryFollow' is not null or undefined
-            if (libraryFollow === null || libraryFollow === undefined) {
-                throw new RequiredError('libraryFollow','Required parameter libraryFollow was null or undefined when calling federationFollowsLibraryRejectCreate.');
-            }
-            const localVarPath = `/api/v1/federation/follows/library/{uuid}/reject/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof libraryFollow !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(libraryFollow !== undefined ? libraryFollow : {}) : (libraryFollow || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling federationFollowsLibraryRetrieve.');
-            }
-            const localVarPath = `/api/v1/federation/follows/library/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {InboxItem} inboxItem 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxActionCreate: async (inboxItem: InboxItem, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'inboxItem' is not null or undefined
-            if (inboxItem === null || inboxItem === undefined) {
-                throw new RequiredError('inboxItem','Required parameter inboxItem was null or undefined when calling federationInboxActionCreate.');
-            }
-            const localVarPath = `/api/v1/federation/inbox/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof inboxItem !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(inboxItem !== undefined ? inboxItem : {}) : (inboxItem || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} [activityActor] 
-         * @param {string} [activityType] 
-         * @param {number} [before] 
-         * @param {boolean} [isRead] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxList: async (activityActor?: number, activityType?: string, before?: number, isRead?: boolean, ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/federation/inbox/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (activityActor !== undefined) {
-                localVarQueryParameter['activity__actor'] = activityActor;
-            }
-
-            if (activityType !== undefined) {
-                localVarQueryParameter['activity__type'] = activityType;
-            }
-
-            if (before !== undefined) {
-                localVarQueryParameter['before'] = before;
-            }
-
-            if (isRead !== undefined) {
-                localVarQueryParameter['is_read'] = isRead;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {PatchedInboxItem} [patchedInboxItem] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxPartialUpdate: async (id: number, patchedInboxItem?: PatchedInboxItem, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling federationInboxPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/federation/inbox/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedInboxItem !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedInboxItem !== undefined ? patchedInboxItem : {}) : (patchedInboxItem || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling federationInboxRetrieve.');
-            }
-            const localVarPath = `/api/v1/federation/inbox/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {InboxItem} inboxItem 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxUpdate: async (id: number, inboxItem: InboxItem, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling federationInboxUpdate.');
-            }
-            // verify required parameter 'inboxItem' is not null or undefined
-            if (inboxItem === null || inboxItem === undefined) {
-                throw new RequiredError('inboxItem','Required parameter inboxItem was null or undefined when calling federationInboxUpdate.');
-            }
-            const localVarPath = `/api/v1/federation/inbox/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof inboxItem !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(inboxItem !== undefined ? inboxItem : {}) : (inboxItem || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {Library} library 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationLibrariesFetchCreate: async (library: Library, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'library' is not null or undefined
-            if (library === null || library === undefined) {
-                throw new RequiredError('library','Required parameter library was null or undefined when calling federationLibrariesFetchCreate.');
-            }
-            const localVarPath = `/api/v1/federation/libraries/fetch/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof library !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(library !== undefined ? library : {}) : (library || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationLibrariesRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling federationLibrariesRetrieve.');
-            }
-            const localVarPath = `/api/v1/federation/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {Library} library 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationLibrariesScanCreate: async (uuid: string, library: Library, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling federationLibrariesScanCreate.');
-            }
-            // verify required parameter 'library' is not null or undefined
-            if (library === null || library === undefined) {
-                throw new RequiredError('library','Required parameter library was null or undefined when calling federationLibrariesScanCreate.');
-            }
-            const localVarPath = `/api/v1/federation/libraries/{uuid}/scan/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof library !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(library !== undefined ? library : {}) : (library || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * FederationApi - functional programming interface
- * @export
- */
-export const FederationApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} fullUsername 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationActorsLibrariesRetrieve(fullUsername: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<FullActor>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationActorsLibrariesRetrieve(fullUsername, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} fullUsername 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationActorsRetrieve(fullUsername: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<FullActor>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationActorsRetrieve(fullUsername, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationDomainsList(ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedDomainList>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationDomainsList(ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationDomainsRetrieve(name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Domain>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationDomainsRetrieve(name, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {Fetch} fetch 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFetchesCreate(fetch: Fetch, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Fetch>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFetchesCreate(fetch, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this fetch.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFetchesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Fetch>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFetchesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFollowsLibraryAcceptCreate(uuid: string, libraryFollow: LibraryFollow, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryFollow>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFollowsLibraryAcceptCreate(uuid, libraryFollow, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFollowsLibraryAllRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryFollow>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFollowsLibraryAllRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFollowsLibraryCreate(libraryFollow: LibraryFollow, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryFollow>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFollowsLibraryCreate(libraryFollow, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFollowsLibraryDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFollowsLibraryDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [approved] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFollowsLibraryList(approved?: boolean, ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedLibraryFollowList>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFollowsLibraryList(approved, ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFollowsLibraryRejectCreate(uuid: string, libraryFollow: LibraryFollow, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryFollow>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFollowsLibraryRejectCreate(uuid, libraryFollow, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationFollowsLibraryRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryFollow>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationFollowsLibraryRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {InboxItem} inboxItem 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationInboxActionCreate(inboxItem: InboxItem, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<InboxItem>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationInboxActionCreate(inboxItem, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} [activityActor] 
-         * @param {string} [activityType] 
-         * @param {number} [before] 
-         * @param {boolean} [isRead] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationInboxList(activityActor?: number, activityType?: string, before?: number, isRead?: boolean, ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedInboxItemList>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationInboxList(activityActor, activityType, before, isRead, ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {PatchedInboxItem} [patchedInboxItem] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationInboxPartialUpdate(id: number, patchedInboxItem?: PatchedInboxItem, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<InboxItem>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationInboxPartialUpdate(id, patchedInboxItem, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationInboxRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<InboxItem>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationInboxRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {InboxItem} inboxItem 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationInboxUpdate(id: number, inboxItem: InboxItem, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<InboxItem>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationInboxUpdate(id, inboxItem, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {Library} library 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationLibrariesFetchCreate(library: Library, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Library>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationLibrariesFetchCreate(library, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationLibrariesRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Library>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationLibrariesRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {Library} library 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async federationLibrariesScanCreate(uuid: string, library: Library, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Library>> {
-            const localVarAxiosArgs = await FederationApiAxiosParamCreator(configuration).federationLibrariesScanCreate(uuid, library, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * FederationApi - factory interface
- * @export
- */
-export const FederationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {string} fullUsername 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationActorsLibrariesRetrieve(fullUsername: string, options?: any): AxiosPromise<FullActor> {
-            return FederationApiFp(configuration).federationActorsLibrariesRetrieve(fullUsername, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} fullUsername 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationActorsRetrieve(fullUsername: string, options?: any): AxiosPromise<FullActor> {
-            return FederationApiFp(configuration).federationActorsRetrieve(fullUsername, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationDomainsList(ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<PaginatedDomainList> {
-            return FederationApiFp(configuration).federationDomainsList(ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationDomainsRetrieve(name: string, options?: any): AxiosPromise<Domain> {
-            return FederationApiFp(configuration).federationDomainsRetrieve(name, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {Fetch} fetch 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFetchesCreate(fetch: Fetch, options?: any): AxiosPromise<Fetch> {
-            return FederationApiFp(configuration).federationFetchesCreate(fetch, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this fetch.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFetchesRetrieve(id: number, options?: any): AxiosPromise<Fetch> {
-            return FederationApiFp(configuration).federationFetchesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryAcceptCreate(uuid: string, libraryFollow: LibraryFollow, options?: any): AxiosPromise<LibraryFollow> {
-            return FederationApiFp(configuration).federationFollowsLibraryAcceptCreate(uuid, libraryFollow, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryAllRetrieve(options?: any): AxiosPromise<LibraryFollow> {
-            return FederationApiFp(configuration).federationFollowsLibraryAllRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryCreate(libraryFollow: LibraryFollow, options?: any): AxiosPromise<LibraryFollow> {
-            return FederationApiFp(configuration).federationFollowsLibraryCreate(libraryFollow, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return FederationApiFp(configuration).federationFollowsLibraryDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [approved] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryList(approved?: boolean, ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<PaginatedLibraryFollowList> {
-            return FederationApiFp(configuration).federationFollowsLibraryList(approved, ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryFollow} libraryFollow 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryRejectCreate(uuid: string, libraryFollow: LibraryFollow, options?: any): AxiosPromise<LibraryFollow> {
-            return FederationApiFp(configuration).federationFollowsLibraryRejectCreate(uuid, libraryFollow, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationFollowsLibraryRetrieve(uuid: string, options?: any): AxiosPromise<LibraryFollow> {
-            return FederationApiFp(configuration).federationFollowsLibraryRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {InboxItem} inboxItem 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxActionCreate(inboxItem: InboxItem, options?: any): AxiosPromise<InboxItem> {
-            return FederationApiFp(configuration).federationInboxActionCreate(inboxItem, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} [activityActor] 
-         * @param {string} [activityType] 
-         * @param {number} [before] 
-         * @param {boolean} [isRead] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxList(activityActor?: number, activityType?: string, before?: number, isRead?: boolean, ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<PaginatedInboxItemList> {
-            return FederationApiFp(configuration).federationInboxList(activityActor, activityType, before, isRead, ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {PatchedInboxItem} [patchedInboxItem] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxPartialUpdate(id: number, patchedInboxItem?: PatchedInboxItem, options?: any): AxiosPromise<InboxItem> {
-            return FederationApiFp(configuration).federationInboxPartialUpdate(id, patchedInboxItem, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxRetrieve(id: number, options?: any): AxiosPromise<InboxItem> {
-            return FederationApiFp(configuration).federationInboxRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this inbox item.
-         * @param {InboxItem} inboxItem 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationInboxUpdate(id: number, inboxItem: InboxItem, options?: any): AxiosPromise<InboxItem> {
-            return FederationApiFp(configuration).federationInboxUpdate(id, inboxItem, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {Library} library 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationLibrariesFetchCreate(library: Library, options?: any): AxiosPromise<Library> {
-            return FederationApiFp(configuration).federationLibrariesFetchCreate(library, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationLibrariesRetrieve(uuid: string, options?: any): AxiosPromise<Library> {
-            return FederationApiFp(configuration).federationLibrariesRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {Library} library 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        federationLibrariesScanCreate(uuid: string, library: Library, options?: any): AxiosPromise<Library> {
-            return FederationApiFp(configuration).federationLibrariesScanCreate(uuid, library, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * FederationApi - object-oriented interface
- * @export
- * @class FederationApi
- * @extends {BaseAPI}
- */
-export class FederationApi extends BaseAPI {
-    /**
-     * 
-     * @param {string} fullUsername 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationActorsLibrariesRetrieve(fullUsername: string, options?: any) {
-        return FederationApiFp(this.configuration).federationActorsLibrariesRetrieve(fullUsername, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} fullUsername 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationActorsRetrieve(fullUsername: string, options?: any) {
-        return FederationApiFp(this.configuration).federationActorsRetrieve(fullUsername, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationDomainsList(ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return FederationApiFp(this.configuration).federationDomainsList(ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name A unique value identifying this domain.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationDomainsRetrieve(name: string, options?: any) {
-        return FederationApiFp(this.configuration).federationDomainsRetrieve(name, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {Fetch} fetch 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFetchesCreate(fetch: Fetch, options?: any) {
-        return FederationApiFp(this.configuration).federationFetchesCreate(fetch, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this fetch.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFetchesRetrieve(id: number, options?: any) {
-        return FederationApiFp(this.configuration).federationFetchesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {LibraryFollow} libraryFollow 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFollowsLibraryAcceptCreate(uuid: string, libraryFollow: LibraryFollow, options?: any) {
-        return FederationApiFp(this.configuration).federationFollowsLibraryAcceptCreate(uuid, libraryFollow, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFollowsLibraryAllRetrieve(options?: any) {
-        return FederationApiFp(this.configuration).federationFollowsLibraryAllRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {LibraryFollow} libraryFollow 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFollowsLibraryCreate(libraryFollow: LibraryFollow, options?: any) {
-        return FederationApiFp(this.configuration).federationFollowsLibraryCreate(libraryFollow, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFollowsLibraryDestroy(uuid: string, options?: any) {
-        return FederationApiFp(this.configuration).federationFollowsLibraryDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [approved] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFollowsLibraryList(approved?: boolean, ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return FederationApiFp(this.configuration).federationFollowsLibraryList(approved, ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {LibraryFollow} libraryFollow 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFollowsLibraryRejectCreate(uuid: string, libraryFollow: LibraryFollow, options?: any) {
-        return FederationApiFp(this.configuration).federationFollowsLibraryRejectCreate(uuid, libraryFollow, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationFollowsLibraryRetrieve(uuid: string, options?: any) {
-        return FederationApiFp(this.configuration).federationFollowsLibraryRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {InboxItem} inboxItem 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationInboxActionCreate(inboxItem: InboxItem, options?: any) {
-        return FederationApiFp(this.configuration).federationInboxActionCreate(inboxItem, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} [activityActor] 
-     * @param {string} [activityType] 
-     * @param {number} [before] 
-     * @param {boolean} [isRead] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationInboxList(activityActor?: number, activityType?: string, before?: number, isRead?: boolean, ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return FederationApiFp(this.configuration).federationInboxList(activityActor, activityType, before, isRead, ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this inbox item.
-     * @param {PatchedInboxItem} [patchedInboxItem] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationInboxPartialUpdate(id: number, patchedInboxItem?: PatchedInboxItem, options?: any) {
-        return FederationApiFp(this.configuration).federationInboxPartialUpdate(id, patchedInboxItem, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this inbox item.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationInboxRetrieve(id: number, options?: any) {
-        return FederationApiFp(this.configuration).federationInboxRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this inbox item.
-     * @param {InboxItem} inboxItem 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationInboxUpdate(id: number, inboxItem: InboxItem, options?: any) {
-        return FederationApiFp(this.configuration).federationInboxUpdate(id, inboxItem, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {Library} library 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationLibrariesFetchCreate(library: Library, options?: any) {
-        return FederationApiFp(this.configuration).federationLibrariesFetchCreate(library, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationLibrariesRetrieve(uuid: string, options?: any) {
-        return FederationApiFp(this.configuration).federationLibrariesRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {Library} library 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof FederationApi
-     */
-    public federationLibrariesScanCreate(uuid: string, library: Library, options?: any) {
-        return FederationApiFp(this.configuration).federationLibrariesScanCreate(uuid, library, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/history-api.ts b/api/history-api.ts
deleted file mode 100644
index ff3caaac8df0e3aba5da985acdab11ff4c2646e2..0000000000000000000000000000000000000000
--- a/api/history-api.ts
+++ /dev/null
@@ -1,369 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Listening } from '../types';
-// @ts-ignore
-import { ListeningWrite } from '../types';
-// @ts-ignore
-import { PaginatedListeningList } from '../types';
-/**
- * HistoryApi - axios parameter creator
- * @export
- */
-export const HistoryApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {ListeningWrite} listeningWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        historyListeningsCreate: async (listeningWrite: ListeningWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'listeningWrite' is not null or undefined
-            if (listeningWrite === null || listeningWrite === undefined) {
-                throw new RequiredError('listeningWrite','Required parameter listeningWrite was null or undefined when calling historyListeningsCreate.');
-            }
-            const localVarPath = `/api/v1/history/listenings/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof listeningWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(listeningWrite !== undefined ? listeningWrite : {}) : (listeningWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {boolean} [hidden] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [scope] 
-         * @param {string} [username] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        historyListeningsList: async (domain?: string, hidden?: boolean, ordering?: string, page?: number, pageSize?: number, scope?: string, username?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/history/listenings/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (domain !== undefined) {
-                localVarQueryParameter['domain'] = domain;
-            }
-
-            if (hidden !== undefined) {
-                localVarQueryParameter['hidden'] = hidden;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-            if (username !== undefined) {
-                localVarQueryParameter['username'] = username;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this listening.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        historyListeningsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling historyListeningsRetrieve.');
-            }
-            const localVarPath = `/api/v1/history/listenings/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * HistoryApi - functional programming interface
- * @export
- */
-export const HistoryApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {ListeningWrite} listeningWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async historyListeningsCreate(listeningWrite: ListeningWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ListeningWrite>> {
-            const localVarAxiosArgs = await HistoryApiAxiosParamCreator(configuration).historyListeningsCreate(listeningWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {boolean} [hidden] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [scope] 
-         * @param {string} [username] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async historyListeningsList(domain?: string, hidden?: boolean, ordering?: string, page?: number, pageSize?: number, scope?: string, username?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedListeningList>> {
-            const localVarAxiosArgs = await HistoryApiAxiosParamCreator(configuration).historyListeningsList(domain, hidden, ordering, page, pageSize, scope, username, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this listening.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async historyListeningsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Listening>> {
-            const localVarAxiosArgs = await HistoryApiAxiosParamCreator(configuration).historyListeningsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * HistoryApi - factory interface
- * @export
- */
-export const HistoryApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {ListeningWrite} listeningWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        historyListeningsCreate(listeningWrite: ListeningWrite, options?: any): AxiosPromise<ListeningWrite> {
-            return HistoryApiFp(configuration).historyListeningsCreate(listeningWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {boolean} [hidden] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [scope] 
-         * @param {string} [username] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        historyListeningsList(domain?: string, hidden?: boolean, ordering?: string, page?: number, pageSize?: number, scope?: string, username?: string, options?: any): AxiosPromise<PaginatedListeningList> {
-            return HistoryApiFp(configuration).historyListeningsList(domain, hidden, ordering, page, pageSize, scope, username, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this listening.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        historyListeningsRetrieve(id: number, options?: any): AxiosPromise<Listening> {
-            return HistoryApiFp(configuration).historyListeningsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * HistoryApi - object-oriented interface
- * @export
- * @class HistoryApi
- * @extends {BaseAPI}
- */
-export class HistoryApi extends BaseAPI {
-    /**
-     * 
-     * @param {ListeningWrite} listeningWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof HistoryApi
-     */
-    public historyListeningsCreate(listeningWrite: ListeningWrite, options?: any) {
-        return HistoryApiFp(this.configuration).historyListeningsCreate(listeningWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [domain] 
-     * @param {boolean} [hidden] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [scope] 
-     * @param {string} [username] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof HistoryApi
-     */
-    public historyListeningsList(domain?: string, hidden?: boolean, ordering?: string, page?: number, pageSize?: number, scope?: string, username?: string, options?: any) {
-        return HistoryApiFp(this.configuration).historyListeningsList(domain, hidden, ordering, page, pageSize, scope, username, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this listening.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof HistoryApi
-     */
-    public historyListeningsRetrieve(id: number, options?: any) {
-        return HistoryApiFp(this.configuration).historyListeningsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/instance-api.ts b/api/instance-api.ts
deleted file mode 100644
index 56c3ea9c984cac244627a2c86015e8e01b16c0f0..0000000000000000000000000000000000000000
--- a/api/instance-api.ts
+++ /dev/null
@@ -1,690 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { GlobalPreference } from '../types';
-// @ts-ignore
-import { NodeInfo20 } from '../types';
-// @ts-ignore
-import { PatchedGlobalPreference } from '../types';
-/**
- * InstanceApi - axios parameter creator
- * @export
- */
-export const InstanceApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * Update multiple preferences at once  this is a long method because we ensure everything is valid before actually persisting the changes
-         * @param {GlobalPreference} globalPreference 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsBulkCreate: async (globalPreference: GlobalPreference, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'globalPreference' is not null or undefined
-            if (globalPreference === null || globalPreference === undefined) {
-                throw new RequiredError('globalPreference','Required parameter globalPreference was null or undefined when calling instanceAdminSettingsBulkCreate.');
-            }
-            const localVarPath = `/api/v1/instance/admin/settings/bulk/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof globalPreference !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(globalPreference !== undefined ? globalPreference : {}) : (globalPreference || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsList: async (ordering?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/instance/admin/settings/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {PatchedGlobalPreference} [patchedGlobalPreference] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsPartialUpdate: async (id: number, patchedGlobalPreference?: PatchedGlobalPreference, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling instanceAdminSettingsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/instance/admin/settings/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedGlobalPreference !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedGlobalPreference !== undefined ? patchedGlobalPreference : {}) : (patchedGlobalPreference || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling instanceAdminSettingsRetrieve.');
-            }
-            const localVarPath = `/api/v1/instance/admin/settings/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {GlobalPreference} globalPreference 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsUpdate: async (id: number, globalPreference: GlobalPreference, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling instanceAdminSettingsUpdate.');
-            }
-            // verify required parameter 'globalPreference' is not null or undefined
-            if (globalPreference === null || globalPreference === undefined) {
-                throw new RequiredError('globalPreference','Required parameter globalPreference was null or undefined when calling instanceAdminSettingsUpdate.');
-            }
-            const localVarPath = `/api/v1/instance/admin/settings/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof globalPreference !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(globalPreference !== undefined ? globalPreference : {}) : (globalPreference || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceNodeinfo20Retrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/instance/nodeinfo/2.0/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceSettingsRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/instance/settings/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceSpaManifestJsonRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/instance/spa-manifest.json`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * InstanceApi - functional programming interface
- * @export
- */
-export const InstanceApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * Update multiple preferences at once  this is a long method because we ensure everything is valid before actually persisting the changes
-         * @param {GlobalPreference} globalPreference 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceAdminSettingsBulkCreate(globalPreference: GlobalPreference, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GlobalPreference>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceAdminSettingsBulkCreate(globalPreference, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceAdminSettingsList(ordering?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<GlobalPreference>>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceAdminSettingsList(ordering, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {PatchedGlobalPreference} [patchedGlobalPreference] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceAdminSettingsPartialUpdate(id: number, patchedGlobalPreference?: PatchedGlobalPreference, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GlobalPreference>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceAdminSettingsPartialUpdate(id, patchedGlobalPreference, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceAdminSettingsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GlobalPreference>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceAdminSettingsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {GlobalPreference} globalPreference 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceAdminSettingsUpdate(id: number, globalPreference: GlobalPreference, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GlobalPreference>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceAdminSettingsUpdate(id, globalPreference, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceNodeinfo20Retrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<NodeInfo20>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceNodeinfo20Retrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceSettingsRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<GlobalPreference>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceSettingsRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async instanceSpaManifestJsonRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await InstanceApiAxiosParamCreator(configuration).instanceSpaManifestJsonRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * InstanceApi - factory interface
- * @export
- */
-export const InstanceApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * Update multiple preferences at once  this is a long method because we ensure everything is valid before actually persisting the changes
-         * @param {GlobalPreference} globalPreference 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsBulkCreate(globalPreference: GlobalPreference, options?: any): AxiosPromise<GlobalPreference> {
-            return InstanceApiFp(configuration).instanceAdminSettingsBulkCreate(globalPreference, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsList(ordering?: string, options?: any): AxiosPromise<Array<GlobalPreference>> {
-            return InstanceApiFp(configuration).instanceAdminSettingsList(ordering, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {PatchedGlobalPreference} [patchedGlobalPreference] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsPartialUpdate(id: number, patchedGlobalPreference?: PatchedGlobalPreference, options?: any): AxiosPromise<GlobalPreference> {
-            return InstanceApiFp(configuration).instanceAdminSettingsPartialUpdate(id, patchedGlobalPreference, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsRetrieve(id: number, options?: any): AxiosPromise<GlobalPreference> {
-            return InstanceApiFp(configuration).instanceAdminSettingsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * - list preferences - detail given preference - batch update preferences - update a single preference
-         * @param {number} id A unique integer value identifying this Global preference.
-         * @param {GlobalPreference} globalPreference 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceAdminSettingsUpdate(id: number, globalPreference: GlobalPreference, options?: any): AxiosPromise<GlobalPreference> {
-            return InstanceApiFp(configuration).instanceAdminSettingsUpdate(id, globalPreference, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceNodeinfo20Retrieve(options?: any): AxiosPromise<NodeInfo20> {
-            return InstanceApiFp(configuration).instanceNodeinfo20Retrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceSettingsRetrieve(options?: any): AxiosPromise<GlobalPreference> {
-            return InstanceApiFp(configuration).instanceSettingsRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        instanceSpaManifestJsonRetrieve(options?: any): AxiosPromise<void> {
-            return InstanceApiFp(configuration).instanceSpaManifestJsonRetrieve(options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * InstanceApi - object-oriented interface
- * @export
- * @class InstanceApi
- * @extends {BaseAPI}
- */
-export class InstanceApi extends BaseAPI {
-    /**
-     * Update multiple preferences at once  this is a long method because we ensure everything is valid before actually persisting the changes
-     * @param {GlobalPreference} globalPreference 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceAdminSettingsBulkCreate(globalPreference: GlobalPreference, options?: any) {
-        return InstanceApiFp(this.configuration).instanceAdminSettingsBulkCreate(globalPreference, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * - list preferences - detail given preference - batch update preferences - update a single preference
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceAdminSettingsList(ordering?: string, options?: any) {
-        return InstanceApiFp(this.configuration).instanceAdminSettingsList(ordering, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * - list preferences - detail given preference - batch update preferences - update a single preference
-     * @param {number} id A unique integer value identifying this Global preference.
-     * @param {PatchedGlobalPreference} [patchedGlobalPreference] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceAdminSettingsPartialUpdate(id: number, patchedGlobalPreference?: PatchedGlobalPreference, options?: any) {
-        return InstanceApiFp(this.configuration).instanceAdminSettingsPartialUpdate(id, patchedGlobalPreference, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * - list preferences - detail given preference - batch update preferences - update a single preference
-     * @param {number} id A unique integer value identifying this Global preference.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceAdminSettingsRetrieve(id: number, options?: any) {
-        return InstanceApiFp(this.configuration).instanceAdminSettingsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * - list preferences - detail given preference - batch update preferences - update a single preference
-     * @param {number} id A unique integer value identifying this Global preference.
-     * @param {GlobalPreference} globalPreference 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceAdminSettingsUpdate(id: number, globalPreference: GlobalPreference, options?: any) {
-        return InstanceApiFp(this.configuration).instanceAdminSettingsUpdate(id, globalPreference, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceNodeinfo20Retrieve(options?: any) {
-        return InstanceApiFp(this.configuration).instanceNodeinfo20Retrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceSettingsRetrieve(options?: any) {
-        return InstanceApiFp(this.configuration).instanceSettingsRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof InstanceApi
-     */
-    public instanceSpaManifestJsonRetrieve(options?: any) {
-        return InstanceApiFp(this.configuration).instanceSpaManifestJsonRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/libraries-api.ts b/api/libraries-api.ts
deleted file mode 100644
index 96b15c4bb8223cef7514c48392c84afe34e59d0a..0000000000000000000000000000000000000000
--- a/api/libraries-api.ts
+++ /dev/null
@@ -1,968 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { LibraryForOwner } from '../types';
-// @ts-ignore
-import { PaginatedLibraryForOwnerList } from '../types';
-// @ts-ignore
-import { PatchedLibraryForOwner } from '../types';
-/**
- * LibrariesApi - axios parameter creator
- * @export
- */
-export const LibrariesApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesCreate: async (libraryForOwner: LibraryForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'libraryForOwner' is not null or undefined
-            if (libraryForOwner === null || libraryForOwner === undefined) {
-                throw new RequiredError('libraryForOwner','Required parameter libraryForOwner was null or undefined when calling librariesCreate.');
-            }
-            const localVarPath = `/api/v1/libraries/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof libraryForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(libraryForOwner !== undefined ? libraryForOwner : {}) : (libraryForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling librariesDestroy.');
-            }
-            const localVarPath = `/api/v1/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFollowsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling librariesFollowsRetrieve.');
-            }
-            const localVarPath = `/api/v1/libraries/{uuid}/follows/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFsImportCreate: async (libraryForOwner: LibraryForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'libraryForOwner' is not null or undefined
-            if (libraryForOwner === null || libraryForOwner === undefined) {
-                throw new RequiredError('libraryForOwner','Required parameter libraryForOwner was null or undefined when calling librariesFsImportCreate.');
-            }
-            const localVarPath = `/api/v1/libraries/fs-import/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof libraryForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(libraryForOwner !== undefined ? libraryForOwner : {}) : (libraryForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFsImportDestroy: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/libraries/fs-import/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFsImportRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/libraries/fs-import/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesList: async (ordering?: string, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, scope?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/libraries/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (privacyLevel !== undefined) {
-                localVarQueryParameter['privacy_level'] = privacyLevel;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedLibraryForOwner} [patchedLibraryForOwner] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesPartialUpdate: async (uuid: string, patchedLibraryForOwner?: PatchedLibraryForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling librariesPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedLibraryForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedLibraryForOwner !== undefined ? patchedLibraryForOwner : {}) : (patchedLibraryForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling librariesRetrieve.');
-            }
-            const localVarPath = `/api/v1/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesUpdate: async (uuid: string, libraryForOwner: LibraryForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling librariesUpdate.');
-            }
-            // verify required parameter 'libraryForOwner' is not null or undefined
-            if (libraryForOwner === null || libraryForOwner === undefined) {
-                throw new RequiredError('libraryForOwner','Required parameter libraryForOwner was null or undefined when calling librariesUpdate.');
-            }
-            const localVarPath = `/api/v1/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof libraryForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(libraryForOwner !== undefined ? libraryForOwner : {}) : (libraryForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * LibrariesApi - functional programming interface
- * @export
- */
-export const LibrariesApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesCreate(libraryForOwner: LibraryForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryForOwner>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesCreate(libraryForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesFollowsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryForOwner>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesFollowsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesFsImportCreate(libraryForOwner: LibraryForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryForOwner>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesFsImportCreate(libraryForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesFsImportDestroy(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesFsImportDestroy(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesFsImportRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryForOwner>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesFsImportRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesList(ordering?: string, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, scope?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedLibraryForOwnerList>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesList(ordering, page, pageSize, privacyLevel, q, scope, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedLibraryForOwner} [patchedLibraryForOwner] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesPartialUpdate(uuid: string, patchedLibraryForOwner?: PatchedLibraryForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryForOwner>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesPartialUpdate(uuid, patchedLibraryForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryForOwner>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async librariesUpdate(uuid: string, libraryForOwner: LibraryForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<LibraryForOwner>> {
-            const localVarAxiosArgs = await LibrariesApiAxiosParamCreator(configuration).librariesUpdate(uuid, libraryForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * LibrariesApi - factory interface
- * @export
- */
-export const LibrariesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesCreate(libraryForOwner: LibraryForOwner, options?: any): AxiosPromise<LibraryForOwner> {
-            return LibrariesApiFp(configuration).librariesCreate(libraryForOwner, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return LibrariesApiFp(configuration).librariesDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFollowsRetrieve(uuid: string, options?: any): AxiosPromise<LibraryForOwner> {
-            return LibrariesApiFp(configuration).librariesFollowsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFsImportCreate(libraryForOwner: LibraryForOwner, options?: any): AxiosPromise<LibraryForOwner> {
-            return LibrariesApiFp(configuration).librariesFsImportCreate(libraryForOwner, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFsImportDestroy(options?: any): AxiosPromise<void> {
-            return LibrariesApiFp(configuration).librariesFsImportDestroy(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesFsImportRetrieve(options?: any): AxiosPromise<LibraryForOwner> {
-            return LibrariesApiFp(configuration).librariesFsImportRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesList(ordering?: string, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, scope?: string, options?: any): AxiosPromise<PaginatedLibraryForOwnerList> {
-            return LibrariesApiFp(configuration).librariesList(ordering, page, pageSize, privacyLevel, q, scope, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedLibraryForOwner} [patchedLibraryForOwner] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesPartialUpdate(uuid: string, patchedLibraryForOwner?: PatchedLibraryForOwner, options?: any): AxiosPromise<LibraryForOwner> {
-            return LibrariesApiFp(configuration).librariesPartialUpdate(uuid, patchedLibraryForOwner, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesRetrieve(uuid: string, options?: any): AxiosPromise<LibraryForOwner> {
-            return LibrariesApiFp(configuration).librariesRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {LibraryForOwner} libraryForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        librariesUpdate(uuid: string, libraryForOwner: LibraryForOwner, options?: any): AxiosPromise<LibraryForOwner> {
-            return LibrariesApiFp(configuration).librariesUpdate(uuid, libraryForOwner, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * LibrariesApi - object-oriented interface
- * @export
- * @class LibrariesApi
- * @extends {BaseAPI}
- */
-export class LibrariesApi extends BaseAPI {
-    /**
-     * 
-     * @param {LibraryForOwner} libraryForOwner 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesCreate(libraryForOwner: LibraryForOwner, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesCreate(libraryForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesDestroy(uuid: string, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesFollowsRetrieve(uuid: string, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesFollowsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {LibraryForOwner} libraryForOwner 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesFsImportCreate(libraryForOwner: LibraryForOwner, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesFsImportCreate(libraryForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesFsImportDestroy(options?: any) {
-        return LibrariesApiFp(this.configuration).librariesFsImportDestroy(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesFsImportRetrieve(options?: any) {
-        return LibrariesApiFp(this.configuration).librariesFsImportRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-     * @param {string} [q] 
-     * @param {string} [scope] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesList(ordering?: string, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, scope?: string, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesList(ordering, page, pageSize, privacyLevel, q, scope, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {PatchedLibraryForOwner} [patchedLibraryForOwner] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesPartialUpdate(uuid: string, patchedLibraryForOwner?: PatchedLibraryForOwner, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesPartialUpdate(uuid, patchedLibraryForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesRetrieve(uuid: string, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {LibraryForOwner} libraryForOwner 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LibrariesApi
-     */
-    public librariesUpdate(uuid: string, libraryForOwner: LibraryForOwner, options?: any) {
-        return LibrariesApiFp(this.configuration).librariesUpdate(uuid, libraryForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/licenses-api.ts b/api/licenses-api.ts
deleted file mode 100644
index f3d7177139011c9365f1a39d3750db4ce5a1ae2d..0000000000000000000000000000000000000000
--- a/api/licenses-api.ts
+++ /dev/null
@@ -1,246 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { License } from '../types';
-// @ts-ignore
-import { PaginatedLicenseList } from '../types';
-/**
- * LicensesApi - axios parameter creator
- * @export
- */
-export const LicensesApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        licensesList: async (ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/licenses/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} code A unique value identifying this license.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        licensesRetrieve: async (code: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'code' is not null or undefined
-            if (code === null || code === undefined) {
-                throw new RequiredError('code','Required parameter code was null or undefined when calling licensesRetrieve.');
-            }
-            const localVarPath = `/api/v1/licenses/{code}/`
-                .replace(`{${"code"}}`, encodeURIComponent(String(code)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * LicensesApi - functional programming interface
- * @export
- */
-export const LicensesApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async licensesList(ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedLicenseList>> {
-            const localVarAxiosArgs = await LicensesApiAxiosParamCreator(configuration).licensesList(ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} code A unique value identifying this license.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async licensesRetrieve(code: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<License>> {
-            const localVarAxiosArgs = await LicensesApiAxiosParamCreator(configuration).licensesRetrieve(code, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * LicensesApi - factory interface
- * @export
- */
-export const LicensesApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        licensesList(ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<PaginatedLicenseList> {
-            return LicensesApiFp(configuration).licensesList(ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} code A unique value identifying this license.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        licensesRetrieve(code: string, options?: any): AxiosPromise<License> {
-            return LicensesApiFp(configuration).licensesRetrieve(code, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * LicensesApi - object-oriented interface
- * @export
- * @class LicensesApi
- * @extends {BaseAPI}
- */
-export class LicensesApi extends BaseAPI {
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LicensesApi
-     */
-    public licensesList(ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return LicensesApiFp(this.configuration).licensesList(ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} code A unique value identifying this license.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof LicensesApi
-     */
-    public licensesRetrieve(code: string, options?: any) {
-        return LicensesApiFp(this.configuration).licensesRetrieve(code, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/listen-api.ts b/api/listen-api.ts
deleted file mode 100644
index ecba560400ebb971b88aa28d66b0c6495d905b51..0000000000000000000000000000000000000000
--- a/api/listen-api.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Track } from '../types';
-/**
- * ListenApi - axios parameter creator
- * @export
- */
-export const ListenApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        listenRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling listenRetrieve.');
-            }
-            const localVarPath = `/api/v1/listen/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * ListenApi - functional programming interface
- * @export
- */
-export const ListenApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async listenRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await ListenApiAxiosParamCreator(configuration).listenRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * ListenApi - factory interface
- * @export
- */
-export const ListenApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        listenRetrieve(uuid: string, options?: any): AxiosPromise<Track> {
-            return ListenApiFp(configuration).listenRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * ListenApi - object-oriented interface
- * @export
- * @class ListenApi
- * @extends {BaseAPI}
- */
-export class ListenApi extends BaseAPI {
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ListenApi
-     */
-    public listenRetrieve(uuid: string, options?: any) {
-        return ListenApiFp(this.configuration).listenRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/manage-api.ts b/api/manage-api.ts
deleted file mode 100644
index f953ae739d719bba83344267cc584d649e83aa57..0000000000000000000000000000000000000000
--- a/api/manage-api.ts
+++ /dev/null
@@ -1,7492 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { ManageActor } from '../types';
-// @ts-ignore
-import { ManageAlbum } from '../types';
-// @ts-ignore
-import { ManageArtist } from '../types';
-// @ts-ignore
-import { ManageChannel } from '../types';
-// @ts-ignore
-import { ManageDomain } from '../types';
-// @ts-ignore
-import { ManageDomainUpdate } from '../types';
-// @ts-ignore
-import { ManageInstancePolicy } from '../types';
-// @ts-ignore
-import { ManageInvitation } from '../types';
-// @ts-ignore
-import { ManageLibrary } from '../types';
-// @ts-ignore
-import { ManageNote } from '../types';
-// @ts-ignore
-import { ManageReport } from '../types';
-// @ts-ignore
-import { ManageTag } from '../types';
-// @ts-ignore
-import { ManageTrack } from '../types';
-// @ts-ignore
-import { ManageUpload } from '../types';
-// @ts-ignore
-import { ManageUser } from '../types';
-// @ts-ignore
-import { ManageUserRequest } from '../types';
-// @ts-ignore
-import { PaginatedManageActorList } from '../types';
-// @ts-ignore
-import { PaginatedManageAlbumList } from '../types';
-// @ts-ignore
-import { PaginatedManageArtistList } from '../types';
-// @ts-ignore
-import { PaginatedManageChannelList } from '../types';
-// @ts-ignore
-import { PaginatedManageDomainList } from '../types';
-// @ts-ignore
-import { PaginatedManageInstancePolicyList } from '../types';
-// @ts-ignore
-import { PaginatedManageInvitationList } from '../types';
-// @ts-ignore
-import { PaginatedManageLibraryList } from '../types';
-// @ts-ignore
-import { PaginatedManageNoteList } from '../types';
-// @ts-ignore
-import { PaginatedManageReportList } from '../types';
-// @ts-ignore
-import { PaginatedManageTagList } from '../types';
-// @ts-ignore
-import { PaginatedManageTrackList } from '../types';
-// @ts-ignore
-import { PaginatedManageUploadList } from '../types';
-// @ts-ignore
-import { PaginatedManageUserList } from '../types';
-// @ts-ignore
-import { PaginatedManageUserRequestList } from '../types';
-// @ts-ignore
-import { PatchedManageDomainUpdate } from '../types';
-// @ts-ignore
-import { PatchedManageInstancePolicy } from '../types';
-// @ts-ignore
-import { PatchedManageInvitation } from '../types';
-// @ts-ignore
-import { PatchedManageLibrary } from '../types';
-// @ts-ignore
-import { PatchedManageReport } from '../types';
-// @ts-ignore
-import { PatchedManageUser } from '../types';
-// @ts-ignore
-import { PatchedManageUserRequest } from '../types';
-/**
- * ManageApi - axios parameter creator
- * @export
- */
-export const ManageApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageActor} manageActor 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsActionCreate: async (manageActor: ManageActor, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageActor' is not null or undefined
-            if (manageActor === null || manageActor === undefined) {
-                throw new RequiredError('manageActor','Required parameter manageActor was null or undefined when calling manageAccountsActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/accounts/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageActor !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageActor !== undefined ? manageActor : {}) : (manageActor || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {boolean} [local] 
-         * @param {boolean} [manuallyApprovesFollowers] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsList: async (domain?: string, local?: boolean, manuallyApprovesFollowers?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: 'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone', options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/accounts/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (domain !== undefined) {
-                localVarQueryParameter['domain'] = domain;
-            }
-
-            if (local !== undefined) {
-                localVarQueryParameter['local'] = local;
-            }
-
-            if (manuallyApprovesFollowers !== undefined) {
-                localVarQueryParameter['manually_approves_followers'] = manuallyApprovesFollowers;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['type'] = type;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} id 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsRetrieve: async (id: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageAccountsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/accounts/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} id 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsStatsRetrieve: async (id: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageAccountsStatsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/accounts/{id}/stats/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsDestroy: async (composite: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling manageChannelsDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/channels/{composite}/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsList: async (ordering?: string, page?: number, pageSize?: number, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/channels/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsRetrieve: async (composite: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling manageChannelsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/channels/{composite}/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsStatsRetrieve: async (composite: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'composite' is not null or undefined
-            if (composite === null || composite === undefined) {
-                throw new RequiredError('composite','Required parameter composite was null or undefined when calling manageChannelsStatsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/channels/{composite}/stats/`
-                .replace(`{${"composite"}}`, encodeURIComponent(String(composite)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageDomain} manageDomain 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsActionCreate: async (manageDomain: ManageDomain, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageDomain' is not null or undefined
-            if (manageDomain === null || manageDomain === undefined) {
-                throw new RequiredError('manageDomain','Required parameter manageDomain was null or undefined when calling manageFederationDomainsActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/federation/domains/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageDomain !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageDomain !== undefined ? manageDomain : {}) : (manageDomain || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {ManageDomain} manageDomain 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsCreate: async (manageDomain: ManageDomain, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageDomain' is not null or undefined
-            if (manageDomain === null || manageDomain === undefined) {
-                throw new RequiredError('manageDomain','Required parameter manageDomain was null or undefined when calling manageFederationDomainsCreate.');
-            }
-            const localVarPath = `/api/v1/manage/federation/domains/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageDomain !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageDomain !== undefined ? manageDomain : {}) : (manageDomain || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [allowed] 
-         * @param {string} [name] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsList: async (allowed?: boolean, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/federation/domains/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (allowed !== undefined) {
-                localVarQueryParameter['allowed'] = allowed;
-            }
-
-            if (name !== undefined) {
-                localVarQueryParameter['name'] = name;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsNodeinfoRetrieve: async (name: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling manageFederationDomainsNodeinfoRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/federation/domains/{name}/nodeinfo/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {PatchedManageDomainUpdate} [patchedManageDomainUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsPartialUpdate: async (name: string, patchedManageDomainUpdate?: PatchedManageDomainUpdate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling manageFederationDomainsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/federation/domains/{name}/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedManageDomainUpdate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedManageDomainUpdate !== undefined ? patchedManageDomainUpdate : {}) : (patchedManageDomainUpdate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsRetrieve: async (name: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling manageFederationDomainsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/federation/domains/{name}/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsStatsRetrieve: async (name: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling manageFederationDomainsStatsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/federation/domains/{name}/stats/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {ManageDomainUpdate} [manageDomainUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsUpdate: async (name: string, manageDomainUpdate?: ManageDomainUpdate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling manageFederationDomainsUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/federation/domains/{name}/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageDomainUpdate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageDomainUpdate !== undefined ? manageDomainUpdate : {}) : (manageDomainUpdate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageAlbum} manageAlbum 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsActionCreate: async (manageAlbum: ManageAlbum, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageAlbum' is not null or undefined
-            if (manageAlbum === null || manageAlbum === undefined) {
-                throw new RequiredError('manageAlbum','Required parameter manageAlbum was null or undefined when calling manageLibraryAlbumsActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/library/albums/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageAlbum !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageAlbum !== undefined ? manageAlbum : {}) : (manageAlbum || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryAlbumsDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/library/albums/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} [artist] 
-         * @param {string} [fid] 
-         * @param {string} [mbid] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [title] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsList: async (artist?: number, fid?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/library/albums/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (artist !== undefined) {
-                localVarQueryParameter['artist'] = artist;
-            }
-
-            if (fid !== undefined) {
-                localVarQueryParameter['fid'] = fid;
-            }
-
-            if (mbid !== undefined) {
-                localVarQueryParameter['mbid'] = mbid;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (title !== undefined) {
-                localVarQueryParameter['title'] = title;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryAlbumsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/albums/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsStatsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryAlbumsStatsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/albums/{id}/stats/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageArtist} manageArtist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsActionCreate: async (manageArtist: ManageArtist, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageArtist' is not null or undefined
-            if (manageArtist === null || manageArtist === undefined) {
-                throw new RequiredError('manageArtist','Required parameter manageArtist was null or undefined when calling manageLibraryArtistsActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/library/artists/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageArtist !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageArtist !== undefined ? manageArtist : {}) : (manageArtist || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryArtistsDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/library/artists/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {'music' | 'other' | 'podcast'} [contentCategory] 
-         * @param {string} [fid] 
-         * @param {string} [mbid] 
-         * @param {string} [name] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsList: async (contentCategory?: 'music' | 'other' | 'podcast', fid?: string, mbid?: string, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/library/artists/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (contentCategory !== undefined) {
-                localVarQueryParameter['content_category'] = contentCategory;
-            }
-
-            if (fid !== undefined) {
-                localVarQueryParameter['fid'] = fid;
-            }
-
-            if (mbid !== undefined) {
-                localVarQueryParameter['mbid'] = mbid;
-            }
-
-            if (name !== undefined) {
-                localVarQueryParameter['name'] = name;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryArtistsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/artists/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsStatsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryArtistsStatsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/artists/{id}/stats/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageLibrary} manageLibrary 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesActionCreate: async (manageLibrary: ManageLibrary, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageLibrary' is not null or undefined
-            if (manageLibrary === null || manageLibrary === undefined) {
-                throw new RequiredError('manageLibrary','Required parameter manageLibrary was null or undefined when calling manageLibraryLibrariesActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/library/libraries/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageLibrary !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageLibrary !== undefined ? manageLibrary : {}) : (manageLibrary || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageLibraryLibrariesDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/library/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {string} [fid] 
-         * @param {string} [name] 
-         * @param {Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesList: async (domain?: string, fid?: string, name?: string, ordering?: Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/library/libraries/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (domain !== undefined) {
-                localVarQueryParameter['domain'] = domain;
-            }
-
-            if (fid !== undefined) {
-                localVarQueryParameter['fid'] = fid;
-            }
-
-            if (name !== undefined) {
-                localVarQueryParameter['name'] = name;
-            }
-
-            if (ordering) {
-                localVarQueryParameter['ordering'] = ordering.join(COLLECTION_FORMATS.csv);
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (privacyLevel !== undefined) {
-                localVarQueryParameter['privacy_level'] = privacyLevel;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageLibrary} [patchedManageLibrary] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesPartialUpdate: async (uuid: string, patchedManageLibrary?: PatchedManageLibrary, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageLibraryLibrariesPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/library/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedManageLibrary !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedManageLibrary !== undefined ? patchedManageLibrary : {}) : (patchedManageLibrary || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageLibraryLibrariesRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesStatsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageLibraryLibrariesStatsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/libraries/{uuid}/stats/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageLibrary} manageLibrary 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesUpdate: async (uuid: string, manageLibrary: ManageLibrary, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageLibraryLibrariesUpdate.');
-            }
-            // verify required parameter 'manageLibrary' is not null or undefined
-            if (manageLibrary === null || manageLibrary === undefined) {
-                throw new RequiredError('manageLibrary','Required parameter manageLibrary was null or undefined when calling manageLibraryLibrariesUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/library/libraries/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageLibrary !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageLibrary !== undefined ? manageLibrary : {}) : (manageLibrary || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageTrack} manageTrack 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksActionCreate: async (manageTrack: ManageTrack, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageTrack' is not null or undefined
-            if (manageTrack === null || manageTrack === undefined) {
-                throw new RequiredError('manageTrack','Required parameter manageTrack was null or undefined when calling manageLibraryTracksActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/library/tracks/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageTrack !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageTrack !== undefined ? manageTrack : {}) : (manageTrack || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryTracksDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/library/tracks/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} [album] 
-         * @param {number} [artist] 
-         * @param {string} [fid] 
-         * @param {string} [license] 
-         * @param {string} [mbid] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [title] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksList: async (album?: number, artist?: number, fid?: string, license?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/library/tracks/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (album !== undefined) {
-                localVarQueryParameter['album'] = album;
-            }
-
-            if (artist !== undefined) {
-                localVarQueryParameter['artist'] = artist;
-            }
-
-            if (fid !== undefined) {
-                localVarQueryParameter['fid'] = fid;
-            }
-
-            if (license !== undefined) {
-                localVarQueryParameter['license'] = license;
-            }
-
-            if (mbid !== undefined) {
-                localVarQueryParameter['mbid'] = mbid;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (title !== undefined) {
-                localVarQueryParameter['title'] = title;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryTracksRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/tracks/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksStatsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageLibraryTracksStatsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/tracks/{id}/stats/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageUpload} manageUpload 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsActionCreate: async (manageUpload: ManageUpload, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageUpload' is not null or undefined
-            if (manageUpload === null || manageUpload === undefined) {
-                throw new RequiredError('manageUpload','Required parameter manageUpload was null or undefined when calling manageLibraryUploadsActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/library/uploads/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageUpload !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageUpload !== undefined ? manageUpload : {}) : (manageUpload || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageLibraryUploadsDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/library/uploads/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {string} [fid] 
-         * @param {string} [importReference] 
-         * @param {'draft' | 'errored' | 'finished' | 'pending' | 'skipped'} [importStatus] 
-         * @param {string} [mimetype] 
-         * @param {Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsList: async (domain?: string, fid?: string, importReference?: string, importStatus?: 'draft' | 'errored' | 'finished' | 'pending' | 'skipped', mimetype?: string, ordering?: Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>, page?: number, pageSize?: number, privacyLevel?: string, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/library/uploads/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (domain !== undefined) {
-                localVarQueryParameter['domain'] = domain;
-            }
-
-            if (fid !== undefined) {
-                localVarQueryParameter['fid'] = fid;
-            }
-
-            if (importReference !== undefined) {
-                localVarQueryParameter['import_reference'] = importReference;
-            }
-
-            if (importStatus !== undefined) {
-                localVarQueryParameter['import_status'] = importStatus;
-            }
-
-            if (mimetype !== undefined) {
-                localVarQueryParameter['mimetype'] = mimetype;
-            }
-
-            if (ordering) {
-                localVarQueryParameter['ordering'] = ordering.join(COLLECTION_FORMATS.csv);
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (privacyLevel !== undefined) {
-                localVarQueryParameter['privacy_level'] = privacyLevel;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageLibraryUploadsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/library/uploads/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {ManageInstancePolicy} manageInstancePolicy 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesCreate: async (manageInstancePolicy: ManageInstancePolicy, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageInstancePolicy' is not null or undefined
-            if (manageInstancePolicy === null || manageInstancePolicy === undefined) {
-                throw new RequiredError('manageInstancePolicy','Required parameter manageInstancePolicy was null or undefined when calling manageModerationInstancePoliciesCreate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/instance-policies/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageInstancePolicy !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageInstancePolicy !== undefined ? manageInstancePolicy : {}) : (manageInstancePolicy || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageModerationInstancePoliciesDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/instance-policies/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [blockAll] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {boolean} [rejectMedia] 
-         * @param {boolean} [silenceActivity] 
-         * @param {boolean} [silenceNotifications] 
-         * @param {string} [targetAccountDomain] 
-         * @param {string} [targetAccountUsername] 
-         * @param {string} [targetDomain] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesList: async (blockAll?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, rejectMedia?: boolean, silenceActivity?: boolean, silenceNotifications?: boolean, targetAccountDomain?: string, targetAccountUsername?: string, targetDomain?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/moderation/instance-policies/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (blockAll !== undefined) {
-                localVarQueryParameter['block_all'] = blockAll;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (rejectMedia !== undefined) {
-                localVarQueryParameter['reject_media'] = rejectMedia;
-            }
-
-            if (silenceActivity !== undefined) {
-                localVarQueryParameter['silence_activity'] = silenceActivity;
-            }
-
-            if (silenceNotifications !== undefined) {
-                localVarQueryParameter['silence_notifications'] = silenceNotifications;
-            }
-
-            if (targetAccountDomain !== undefined) {
-                localVarQueryParameter['target_account_domain'] = targetAccountDomain;
-            }
-
-            if (targetAccountUsername !== undefined) {
-                localVarQueryParameter['target_account_username'] = targetAccountUsername;
-            }
-
-            if (targetDomain !== undefined) {
-                localVarQueryParameter['target_domain'] = targetDomain;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {PatchedManageInstancePolicy} [patchedManageInstancePolicy] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesPartialUpdate: async (id: number, patchedManageInstancePolicy?: PatchedManageInstancePolicy, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageModerationInstancePoliciesPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/instance-policies/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedManageInstancePolicy !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedManageInstancePolicy !== undefined ? patchedManageInstancePolicy : {}) : (patchedManageInstancePolicy || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageModerationInstancePoliciesRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/instance-policies/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {ManageInstancePolicy} manageInstancePolicy 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesUpdate: async (id: number, manageInstancePolicy: ManageInstancePolicy, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageModerationInstancePoliciesUpdate.');
-            }
-            // verify required parameter 'manageInstancePolicy' is not null or undefined
-            if (manageInstancePolicy === null || manageInstancePolicy === undefined) {
-                throw new RequiredError('manageInstancePolicy','Required parameter manageInstancePolicy was null or undefined when calling manageModerationInstancePoliciesUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/instance-policies/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageInstancePolicy !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageInstancePolicy !== undefined ? manageInstancePolicy : {}) : (manageInstancePolicy || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {ManageNote} manageNote 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesCreate: async (manageNote: ManageNote, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageNote' is not null or undefined
-            if (manageNote === null || manageNote === undefined) {
-                throw new RequiredError('manageNote','Required parameter manageNote was null or undefined when calling manageModerationNotesCreate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/notes/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageNote !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageNote !== undefined ? manageNote : {}) : (manageNote || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationNotesDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/notes/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesList: async (ordering?: string, page?: number, pageSize?: number, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/moderation/notes/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationNotesRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/notes/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isHandled] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [submitterEmail] 
-         * @param {'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsList: async (isHandled?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, submitterEmail?: string, type?: 'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request', options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/moderation/reports/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (isHandled !== undefined) {
-                localVarQueryParameter['is_handled'] = isHandled;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (submitterEmail !== undefined) {
-                localVarQueryParameter['submitter_email'] = submitterEmail;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['type'] = type;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageReport} [patchedManageReport] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsPartialUpdate: async (uuid: string, patchedManageReport?: PatchedManageReport, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationReportsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/reports/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedManageReport !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedManageReport !== undefined ? patchedManageReport : {}) : (patchedManageReport || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationReportsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/reports/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageReport} manageReport 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsUpdate: async (uuid: string, manageReport: ManageReport, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationReportsUpdate.');
-            }
-            // verify required parameter 'manageReport' is not null or undefined
-            if (manageReport === null || manageReport === undefined) {
-                throw new RequiredError('manageReport','Required parameter manageReport was null or undefined when calling manageModerationReportsUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/reports/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageReport !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageReport !== undefined ? manageReport : {}) : (manageReport || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {'approved' | 'pending' | 'refused'} [status] 
-         * @param {'signup'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsList: async (ordering?: string, page?: number, pageSize?: number, q?: string, status?: 'approved' | 'pending' | 'refused', type?: 'signup', options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/moderation/requests/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (status !== undefined) {
-                localVarQueryParameter['status'] = status;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['type'] = type;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageUserRequest} [patchedManageUserRequest] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsPartialUpdate: async (uuid: string, patchedManageUserRequest?: PatchedManageUserRequest, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationRequestsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/requests/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedManageUserRequest !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedManageUserRequest !== undefined ? patchedManageUserRequest : {}) : (patchedManageUserRequest || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationRequestsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/requests/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageUserRequest} manageUserRequest 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsUpdate: async (uuid: string, manageUserRequest: ManageUserRequest, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling manageModerationRequestsUpdate.');
-            }
-            // verify required parameter 'manageUserRequest' is not null or undefined
-            if (manageUserRequest === null || manageUserRequest === undefined) {
-                throw new RequiredError('manageUserRequest','Required parameter manageUserRequest was null or undefined when calling manageModerationRequestsUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/moderation/requests/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageUserRequest !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageUserRequest !== undefined ? manageUserRequest : {}) : (manageUserRequest || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageTag} manageTag 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsActionCreate: async (manageTag: ManageTag, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageTag' is not null or undefined
-            if (manageTag === null || manageTag === undefined) {
-                throw new RequiredError('manageTag','Required parameter manageTag was null or undefined when calling manageTagsActionCreate.');
-            }
-            const localVarPath = `/api/v1/manage/tags/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageTag !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageTag !== undefined ? manageTag : {}) : (manageTag || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {ManageTag} manageTag 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsCreate: async (manageTag: ManageTag, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'manageTag' is not null or undefined
-            if (manageTag === null || manageTag === undefined) {
-                throw new RequiredError('manageTag','Required parameter manageTag was null or undefined when calling manageTagsCreate.');
-            }
-            const localVarPath = `/api/v1/manage/tags/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageTag !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageTag !== undefined ? manageTag : {}) : (manageTag || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsDestroy: async (name: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling manageTagsDestroy.');
-            }
-            const localVarPath = `/api/v1/manage/tags/{name}/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsList: async (ordering?: string, page?: number, pageSize?: number, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/tags/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsRetrieve: async (name: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling manageTagsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/tags/{name}/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsActionCreate: async (manageInvitation?: ManageInvitation, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/users/invitations/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageInvitation !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageInvitation !== undefined ? manageInvitation : {}) : (manageInvitation || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsCreate: async (manageInvitation?: ManageInvitation, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/users/invitations/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageInvitation !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageInvitation !== undefined ? manageInvitation : {}) : (manageInvitation || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isOpen] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsList: async (isOpen?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/users/invitations/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (isOpen !== undefined) {
-                localVarQueryParameter['is_open'] = isOpen;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {PatchedManageInvitation} [patchedManageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsPartialUpdate: async (id: number, patchedManageInvitation?: PatchedManageInvitation, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageUsersInvitationsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/users/invitations/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedManageInvitation !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedManageInvitation !== undefined ? patchedManageInvitation : {}) : (patchedManageInvitation || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageUsersInvitationsRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/users/invitations/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsUpdate: async (id: number, manageInvitation?: ManageInvitation, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageUsersInvitationsUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/users/invitations/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageInvitation !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageInvitation !== undefined ? manageInvitation : {}) : (manageInvitation || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isActive] 
-         * @param {boolean} [isStaff] 
-         * @param {boolean} [isSuperuser] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [permissionLibrary] 
-         * @param {boolean} [permissionModeration] 
-         * @param {boolean} [permissionSettings] 
-         * @param {'everyone' | 'followers' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersList: async (isActive?: boolean, isStaff?: boolean, isSuperuser?: boolean, ordering?: string, page?: number, pageSize?: number, permissionLibrary?: boolean, permissionModeration?: boolean, permissionSettings?: boolean, privacyLevel?: 'everyone' | 'followers' | 'instance' | 'me', q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/manage/users/users/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (isActive !== undefined) {
-                localVarQueryParameter['is_active'] = isActive;
-            }
-
-            if (isStaff !== undefined) {
-                localVarQueryParameter['is_staff'] = isStaff;
-            }
-
-            if (isSuperuser !== undefined) {
-                localVarQueryParameter['is_superuser'] = isSuperuser;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (permissionLibrary !== undefined) {
-                localVarQueryParameter['permission_library'] = permissionLibrary;
-            }
-
-            if (permissionModeration !== undefined) {
-                localVarQueryParameter['permission_moderation'] = permissionModeration;
-            }
-
-            if (permissionSettings !== undefined) {
-                localVarQueryParameter['permission_settings'] = permissionSettings;
-            }
-
-            if (privacyLevel !== undefined) {
-                localVarQueryParameter['privacy_level'] = privacyLevel;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {PatchedManageUser} [patchedManageUser] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersPartialUpdate: async (id: number, patchedManageUser?: PatchedManageUser, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageUsersUsersPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/users/users/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedManageUser !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedManageUser !== undefined ? patchedManageUser : {}) : (patchedManageUser || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageUsersUsersRetrieve.');
-            }
-            const localVarPath = `/api/v1/manage/users/users/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {ManageUser} manageUser 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersUpdate: async (id: number, manageUser: ManageUser, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling manageUsersUsersUpdate.');
-            }
-            // verify required parameter 'manageUser' is not null or undefined
-            if (manageUser === null || manageUser === undefined) {
-                throw new RequiredError('manageUser','Required parameter manageUser was null or undefined when calling manageUsersUsersUpdate.');
-            }
-            const localVarPath = `/api/v1/manage/users/users/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof manageUser !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(manageUser !== undefined ? manageUser : {}) : (manageUser || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * ManageApi - functional programming interface
- * @export
- */
-export const ManageApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageActor} manageActor 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageAccountsActionCreate(manageActor: ManageActor, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageActor>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageAccountsActionCreate(manageActor, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {boolean} [local] 
-         * @param {boolean} [manuallyApprovesFollowers] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageAccountsList(domain?: string, local?: boolean, manuallyApprovesFollowers?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: 'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone', options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageActorList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageAccountsList(domain, local, manuallyApprovesFollowers, ordering, page, pageSize, q, type, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} id 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageAccountsRetrieve(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageActor>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageAccountsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} id 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageAccountsStatsRetrieve(id: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageActor>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageAccountsStatsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageChannelsDestroy(composite: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageChannelsDestroy(composite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageChannelsList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageChannelList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageChannelsList(ordering, page, pageSize, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageChannelsRetrieve(composite: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageChannel>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageChannelsRetrieve(composite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageChannelsStatsRetrieve(composite: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageChannel>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageChannelsStatsRetrieve(composite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageDomain} manageDomain 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsActionCreate(manageDomain: ManageDomain, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageDomain>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsActionCreate(manageDomain, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {ManageDomain} manageDomain 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsCreate(manageDomain: ManageDomain, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageDomain>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsCreate(manageDomain, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [allowed] 
-         * @param {string} [name] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsList(allowed?: boolean, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageDomainList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsList(allowed, name, ordering, page, pageSize, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsNodeinfoRetrieve(name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageDomain>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsNodeinfoRetrieve(name, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {PatchedManageDomainUpdate} [patchedManageDomainUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsPartialUpdate(name: string, patchedManageDomainUpdate?: PatchedManageDomainUpdate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageDomainUpdate>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsPartialUpdate(name, patchedManageDomainUpdate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsRetrieve(name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageDomain>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsRetrieve(name, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsStatsRetrieve(name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageDomain>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsStatsRetrieve(name, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {ManageDomainUpdate} [manageDomainUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageFederationDomainsUpdate(name: string, manageDomainUpdate?: ManageDomainUpdate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageDomainUpdate>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageFederationDomainsUpdate(name, manageDomainUpdate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageAlbum} manageAlbum 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryAlbumsActionCreate(manageAlbum: ManageAlbum, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageAlbum>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryAlbumsActionCreate(manageAlbum, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryAlbumsDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryAlbumsDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} [artist] 
-         * @param {string} [fid] 
-         * @param {string} [mbid] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [title] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryAlbumsList(artist?: number, fid?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageAlbumList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryAlbumsList(artist, fid, mbid, ordering, page, pageSize, q, title, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryAlbumsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageAlbum>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryAlbumsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryAlbumsStatsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageAlbum>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryAlbumsStatsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageArtist} manageArtist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryArtistsActionCreate(manageArtist: ManageArtist, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageArtist>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryArtistsActionCreate(manageArtist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryArtistsDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryArtistsDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {'music' | 'other' | 'podcast'} [contentCategory] 
-         * @param {string} [fid] 
-         * @param {string} [mbid] 
-         * @param {string} [name] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryArtistsList(contentCategory?: 'music' | 'other' | 'podcast', fid?: string, mbid?: string, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageArtistList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryArtistsList(contentCategory, fid, mbid, name, ordering, page, pageSize, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryArtistsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageArtist>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryArtistsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryArtistsStatsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageArtist>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryArtistsStatsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageLibrary} manageLibrary 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryLibrariesActionCreate(manageLibrary: ManageLibrary, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageLibrary>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryLibrariesActionCreate(manageLibrary, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryLibrariesDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryLibrariesDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {string} [fid] 
-         * @param {string} [name] 
-         * @param {Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryLibrariesList(domain?: string, fid?: string, name?: string, ordering?: Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageLibraryList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryLibrariesList(domain, fid, name, ordering, page, pageSize, privacyLevel, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageLibrary} [patchedManageLibrary] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryLibrariesPartialUpdate(uuid: string, patchedManageLibrary?: PatchedManageLibrary, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageLibrary>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryLibrariesPartialUpdate(uuid, patchedManageLibrary, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryLibrariesRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageLibrary>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryLibrariesRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryLibrariesStatsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageLibrary>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryLibrariesStatsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageLibrary} manageLibrary 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryLibrariesUpdate(uuid: string, manageLibrary: ManageLibrary, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageLibrary>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryLibrariesUpdate(uuid, manageLibrary, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageTrack} manageTrack 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryTracksActionCreate(manageTrack: ManageTrack, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageTrack>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryTracksActionCreate(manageTrack, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryTracksDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryTracksDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} [album] 
-         * @param {number} [artist] 
-         * @param {string} [fid] 
-         * @param {string} [license] 
-         * @param {string} [mbid] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [title] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryTracksList(album?: number, artist?: number, fid?: string, license?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageTrackList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryTracksList(album, artist, fid, license, mbid, ordering, page, pageSize, q, title, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryTracksRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageTrack>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryTracksRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryTracksStatsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageTrack>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryTracksStatsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageUpload} manageUpload 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryUploadsActionCreate(manageUpload: ManageUpload, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUpload>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryUploadsActionCreate(manageUpload, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryUploadsDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryUploadsDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {string} [fid] 
-         * @param {string} [importReference] 
-         * @param {'draft' | 'errored' | 'finished' | 'pending' | 'skipped'} [importStatus] 
-         * @param {string} [mimetype] 
-         * @param {Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryUploadsList(domain?: string, fid?: string, importReference?: string, importStatus?: 'draft' | 'errored' | 'finished' | 'pending' | 'skipped', mimetype?: string, ordering?: Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>, page?: number, pageSize?: number, privacyLevel?: string, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageUploadList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryUploadsList(domain, fid, importReference, importStatus, mimetype, ordering, page, pageSize, privacyLevel, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageLibraryUploadsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUpload>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageLibraryUploadsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {ManageInstancePolicy} manageInstancePolicy 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationInstancePoliciesCreate(manageInstancePolicy: ManageInstancePolicy, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInstancePolicy>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationInstancePoliciesCreate(manageInstancePolicy, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationInstancePoliciesDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationInstancePoliciesDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [blockAll] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {boolean} [rejectMedia] 
-         * @param {boolean} [silenceActivity] 
-         * @param {boolean} [silenceNotifications] 
-         * @param {string} [targetAccountDomain] 
-         * @param {string} [targetAccountUsername] 
-         * @param {string} [targetDomain] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationInstancePoliciesList(blockAll?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, rejectMedia?: boolean, silenceActivity?: boolean, silenceNotifications?: boolean, targetAccountDomain?: string, targetAccountUsername?: string, targetDomain?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageInstancePolicyList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationInstancePoliciesList(blockAll, ordering, page, pageSize, q, rejectMedia, silenceActivity, silenceNotifications, targetAccountDomain, targetAccountUsername, targetDomain, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {PatchedManageInstancePolicy} [patchedManageInstancePolicy] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationInstancePoliciesPartialUpdate(id: number, patchedManageInstancePolicy?: PatchedManageInstancePolicy, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInstancePolicy>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationInstancePoliciesPartialUpdate(id, patchedManageInstancePolicy, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationInstancePoliciesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInstancePolicy>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationInstancePoliciesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {ManageInstancePolicy} manageInstancePolicy 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationInstancePoliciesUpdate(id: number, manageInstancePolicy: ManageInstancePolicy, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInstancePolicy>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationInstancePoliciesUpdate(id, manageInstancePolicy, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {ManageNote} manageNote 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationNotesCreate(manageNote: ManageNote, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageNote>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationNotesCreate(manageNote, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationNotesDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationNotesDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationNotesList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageNoteList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationNotesList(ordering, page, pageSize, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationNotesRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageNote>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationNotesRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isHandled] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [submitterEmail] 
-         * @param {'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationReportsList(isHandled?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, submitterEmail?: string, type?: 'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request', options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageReportList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationReportsList(isHandled, ordering, page, pageSize, q, submitterEmail, type, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageReport} [patchedManageReport] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationReportsPartialUpdate(uuid: string, patchedManageReport?: PatchedManageReport, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageReport>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationReportsPartialUpdate(uuid, patchedManageReport, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationReportsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageReport>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationReportsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageReport} manageReport 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationReportsUpdate(uuid: string, manageReport: ManageReport, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageReport>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationReportsUpdate(uuid, manageReport, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {'approved' | 'pending' | 'refused'} [status] 
-         * @param {'signup'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationRequestsList(ordering?: string, page?: number, pageSize?: number, q?: string, status?: 'approved' | 'pending' | 'refused', type?: 'signup', options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageUserRequestList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationRequestsList(ordering, page, pageSize, q, status, type, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageUserRequest} [patchedManageUserRequest] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationRequestsPartialUpdate(uuid: string, patchedManageUserRequest?: PatchedManageUserRequest, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUserRequest>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationRequestsPartialUpdate(uuid, patchedManageUserRequest, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationRequestsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUserRequest>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationRequestsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageUserRequest} manageUserRequest 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageModerationRequestsUpdate(uuid: string, manageUserRequest: ManageUserRequest, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUserRequest>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageModerationRequestsUpdate(uuid, manageUserRequest, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageTag} manageTag 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageTagsActionCreate(manageTag: ManageTag, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageTag>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageTagsActionCreate(manageTag, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {ManageTag} manageTag 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageTagsCreate(manageTag: ManageTag, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageTag>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageTagsCreate(manageTag, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageTagsDestroy(name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageTagsDestroy(name, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageTagsList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageTagList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageTagsList(ordering, page, pageSize, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageTagsRetrieve(name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageTag>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageTagsRetrieve(name, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersInvitationsActionCreate(manageInvitation?: ManageInvitation, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInvitation>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersInvitationsActionCreate(manageInvitation, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersInvitationsCreate(manageInvitation?: ManageInvitation, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInvitation>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersInvitationsCreate(manageInvitation, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isOpen] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersInvitationsList(isOpen?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageInvitationList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersInvitationsList(isOpen, ordering, page, pageSize, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {PatchedManageInvitation} [patchedManageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersInvitationsPartialUpdate(id: number, patchedManageInvitation?: PatchedManageInvitation, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInvitation>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersInvitationsPartialUpdate(id, patchedManageInvitation, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersInvitationsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInvitation>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersInvitationsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersInvitationsUpdate(id: number, manageInvitation?: ManageInvitation, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageInvitation>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersInvitationsUpdate(id, manageInvitation, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isActive] 
-         * @param {boolean} [isStaff] 
-         * @param {boolean} [isSuperuser] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [permissionLibrary] 
-         * @param {boolean} [permissionModeration] 
-         * @param {boolean} [permissionSettings] 
-         * @param {'everyone' | 'followers' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersUsersList(isActive?: boolean, isStaff?: boolean, isSuperuser?: boolean, ordering?: string, page?: number, pageSize?: number, permissionLibrary?: boolean, permissionModeration?: boolean, permissionSettings?: boolean, privacyLevel?: 'everyone' | 'followers' | 'instance' | 'me', q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedManageUserList>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersUsersList(isActive, isStaff, isSuperuser, ordering, page, pageSize, permissionLibrary, permissionModeration, permissionSettings, privacyLevel, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {PatchedManageUser} [patchedManageUser] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersUsersPartialUpdate(id: number, patchedManageUser?: PatchedManageUser, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUser>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersUsersPartialUpdate(id, patchedManageUser, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersUsersRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUser>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersUsersRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {ManageUser} manageUser 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async manageUsersUsersUpdate(id: number, manageUser: ManageUser, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<ManageUser>> {
-            const localVarAxiosArgs = await ManageApiAxiosParamCreator(configuration).manageUsersUsersUpdate(id, manageUser, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * ManageApi - factory interface
- * @export
- */
-export const ManageApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageActor} manageActor 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsActionCreate(manageActor: ManageActor, options?: any): AxiosPromise<ManageActor> {
-            return ManageApiFp(configuration).manageAccountsActionCreate(manageActor, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {boolean} [local] 
-         * @param {boolean} [manuallyApprovesFollowers] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsList(domain?: string, local?: boolean, manuallyApprovesFollowers?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: 'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone', options?: any): AxiosPromise<PaginatedManageActorList> {
-            return ManageApiFp(configuration).manageAccountsList(domain, local, manuallyApprovesFollowers, ordering, page, pageSize, q, type, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} id 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsRetrieve(id: string, options?: any): AxiosPromise<ManageActor> {
-            return ManageApiFp(configuration).manageAccountsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} id 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageAccountsStatsRetrieve(id: string, options?: any): AxiosPromise<ManageActor> {
-            return ManageApiFp(configuration).manageAccountsStatsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsDestroy(composite: string, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageChannelsDestroy(composite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): AxiosPromise<PaginatedManageChannelList> {
-            return ManageApiFp(configuration).manageChannelsList(ordering, page, pageSize, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsRetrieve(composite: string, options?: any): AxiosPromise<ManageChannel> {
-            return ManageApiFp(configuration).manageChannelsRetrieve(composite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} composite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageChannelsStatsRetrieve(composite: string, options?: any): AxiosPromise<ManageChannel> {
-            return ManageApiFp(configuration).manageChannelsStatsRetrieve(composite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageDomain} manageDomain 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsActionCreate(manageDomain: ManageDomain, options?: any): AxiosPromise<ManageDomain> {
-            return ManageApiFp(configuration).manageFederationDomainsActionCreate(manageDomain, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {ManageDomain} manageDomain 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsCreate(manageDomain: ManageDomain, options?: any): AxiosPromise<ManageDomain> {
-            return ManageApiFp(configuration).manageFederationDomainsCreate(manageDomain, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [allowed] 
-         * @param {string} [name] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsList(allowed?: boolean, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): AxiosPromise<PaginatedManageDomainList> {
-            return ManageApiFp(configuration).manageFederationDomainsList(allowed, name, ordering, page, pageSize, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsNodeinfoRetrieve(name: string, options?: any): AxiosPromise<ManageDomain> {
-            return ManageApiFp(configuration).manageFederationDomainsNodeinfoRetrieve(name, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {PatchedManageDomainUpdate} [patchedManageDomainUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsPartialUpdate(name: string, patchedManageDomainUpdate?: PatchedManageDomainUpdate, options?: any): AxiosPromise<ManageDomainUpdate> {
-            return ManageApiFp(configuration).manageFederationDomainsPartialUpdate(name, patchedManageDomainUpdate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsRetrieve(name: string, options?: any): AxiosPromise<ManageDomain> {
-            return ManageApiFp(configuration).manageFederationDomainsRetrieve(name, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsStatsRetrieve(name: string, options?: any): AxiosPromise<ManageDomain> {
-            return ManageApiFp(configuration).manageFederationDomainsStatsRetrieve(name, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name A unique value identifying this domain.
-         * @param {ManageDomainUpdate} [manageDomainUpdate] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageFederationDomainsUpdate(name: string, manageDomainUpdate?: ManageDomainUpdate, options?: any): AxiosPromise<ManageDomainUpdate> {
-            return ManageApiFp(configuration).manageFederationDomainsUpdate(name, manageDomainUpdate, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageAlbum} manageAlbum 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsActionCreate(manageAlbum: ManageAlbum, options?: any): AxiosPromise<ManageAlbum> {
-            return ManageApiFp(configuration).manageLibraryAlbumsActionCreate(manageAlbum, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsDestroy(id: number, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageLibraryAlbumsDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} [artist] 
-         * @param {string} [fid] 
-         * @param {string} [mbid] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [title] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsList(artist?: number, fid?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options?: any): AxiosPromise<PaginatedManageAlbumList> {
-            return ManageApiFp(configuration).manageLibraryAlbumsList(artist, fid, mbid, ordering, page, pageSize, q, title, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsRetrieve(id: number, options?: any): AxiosPromise<ManageAlbum> {
-            return ManageApiFp(configuration).manageLibraryAlbumsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this album.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryAlbumsStatsRetrieve(id: number, options?: any): AxiosPromise<ManageAlbum> {
-            return ManageApiFp(configuration).manageLibraryAlbumsStatsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageArtist} manageArtist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsActionCreate(manageArtist: ManageArtist, options?: any): AxiosPromise<ManageArtist> {
-            return ManageApiFp(configuration).manageLibraryArtistsActionCreate(manageArtist, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsDestroy(id: number, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageLibraryArtistsDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {'music' | 'other' | 'podcast'} [contentCategory] 
-         * @param {string} [fid] 
-         * @param {string} [mbid] 
-         * @param {string} [name] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsList(contentCategory?: 'music' | 'other' | 'podcast', fid?: string, mbid?: string, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): AxiosPromise<PaginatedManageArtistList> {
-            return ManageApiFp(configuration).manageLibraryArtistsList(contentCategory, fid, mbid, name, ordering, page, pageSize, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsRetrieve(id: number, options?: any): AxiosPromise<ManageArtist> {
-            return ManageApiFp(configuration).manageLibraryArtistsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this artist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryArtistsStatsRetrieve(id: number, options?: any): AxiosPromise<ManageArtist> {
-            return ManageApiFp(configuration).manageLibraryArtistsStatsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageLibrary} manageLibrary 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesActionCreate(manageLibrary: ManageLibrary, options?: any): AxiosPromise<ManageLibrary> {
-            return ManageApiFp(configuration).manageLibraryLibrariesActionCreate(manageLibrary, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageLibraryLibrariesDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {string} [fid] 
-         * @param {string} [name] 
-         * @param {Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesList(domain?: string, fid?: string, name?: string, ordering?: Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, options?: any): AxiosPromise<PaginatedManageLibraryList> {
-            return ManageApiFp(configuration).manageLibraryLibrariesList(domain, fid, name, ordering, page, pageSize, privacyLevel, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageLibrary} [patchedManageLibrary] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesPartialUpdate(uuid: string, patchedManageLibrary?: PatchedManageLibrary, options?: any): AxiosPromise<ManageLibrary> {
-            return ManageApiFp(configuration).manageLibraryLibrariesPartialUpdate(uuid, patchedManageLibrary, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesRetrieve(uuid: string, options?: any): AxiosPromise<ManageLibrary> {
-            return ManageApiFp(configuration).manageLibraryLibrariesRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesStatsRetrieve(uuid: string, options?: any): AxiosPromise<ManageLibrary> {
-            return ManageApiFp(configuration).manageLibraryLibrariesStatsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageLibrary} manageLibrary 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryLibrariesUpdate(uuid: string, manageLibrary: ManageLibrary, options?: any): AxiosPromise<ManageLibrary> {
-            return ManageApiFp(configuration).manageLibraryLibrariesUpdate(uuid, manageLibrary, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageTrack} manageTrack 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksActionCreate(manageTrack: ManageTrack, options?: any): AxiosPromise<ManageTrack> {
-            return ManageApiFp(configuration).manageLibraryTracksActionCreate(manageTrack, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksDestroy(id: number, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageLibraryTracksDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} [album] 
-         * @param {number} [artist] 
-         * @param {string} [fid] 
-         * @param {string} [license] 
-         * @param {string} [mbid] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [title] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksList(album?: number, artist?: number, fid?: string, license?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options?: any): AxiosPromise<PaginatedManageTrackList> {
-            return ManageApiFp(configuration).manageLibraryTracksList(album, artist, fid, license, mbid, ordering, page, pageSize, q, title, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksRetrieve(id: number, options?: any): AxiosPromise<ManageTrack> {
-            return ManageApiFp(configuration).manageLibraryTracksRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryTracksStatsRetrieve(id: number, options?: any): AxiosPromise<ManageTrack> {
-            return ManageApiFp(configuration).manageLibraryTracksStatsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageUpload} manageUpload 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsActionCreate(manageUpload: ManageUpload, options?: any): AxiosPromise<ManageUpload> {
-            return ManageApiFp(configuration).manageLibraryUploadsActionCreate(manageUpload, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageLibraryUploadsDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [domain] 
-         * @param {string} [fid] 
-         * @param {string} [importReference] 
-         * @param {'draft' | 'errored' | 'finished' | 'pending' | 'skipped'} [importStatus] 
-         * @param {string} [mimetype] 
-         * @param {Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsList(domain?: string, fid?: string, importReference?: string, importStatus?: 'draft' | 'errored' | 'finished' | 'pending' | 'skipped', mimetype?: string, ordering?: Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>, page?: number, pageSize?: number, privacyLevel?: string, q?: string, options?: any): AxiosPromise<PaginatedManageUploadList> {
-            return ManageApiFp(configuration).manageLibraryUploadsList(domain, fid, importReference, importStatus, mimetype, ordering, page, pageSize, privacyLevel, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageLibraryUploadsRetrieve(uuid: string, options?: any): AxiosPromise<ManageUpload> {
-            return ManageApiFp(configuration).manageLibraryUploadsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {ManageInstancePolicy} manageInstancePolicy 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesCreate(manageInstancePolicy: ManageInstancePolicy, options?: any): AxiosPromise<ManageInstancePolicy> {
-            return ManageApiFp(configuration).manageModerationInstancePoliciesCreate(manageInstancePolicy, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesDestroy(id: number, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageModerationInstancePoliciesDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [blockAll] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {boolean} [rejectMedia] 
-         * @param {boolean} [silenceActivity] 
-         * @param {boolean} [silenceNotifications] 
-         * @param {string} [targetAccountDomain] 
-         * @param {string} [targetAccountUsername] 
-         * @param {string} [targetDomain] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesList(blockAll?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, rejectMedia?: boolean, silenceActivity?: boolean, silenceNotifications?: boolean, targetAccountDomain?: string, targetAccountUsername?: string, targetDomain?: string, options?: any): AxiosPromise<PaginatedManageInstancePolicyList> {
-            return ManageApiFp(configuration).manageModerationInstancePoliciesList(blockAll, ordering, page, pageSize, q, rejectMedia, silenceActivity, silenceNotifications, targetAccountDomain, targetAccountUsername, targetDomain, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {PatchedManageInstancePolicy} [patchedManageInstancePolicy] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesPartialUpdate(id: number, patchedManageInstancePolicy?: PatchedManageInstancePolicy, options?: any): AxiosPromise<ManageInstancePolicy> {
-            return ManageApiFp(configuration).manageModerationInstancePoliciesPartialUpdate(id, patchedManageInstancePolicy, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesRetrieve(id: number, options?: any): AxiosPromise<ManageInstancePolicy> {
-            return ManageApiFp(configuration).manageModerationInstancePoliciesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this instance policy.
-         * @param {ManageInstancePolicy} manageInstancePolicy 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationInstancePoliciesUpdate(id: number, manageInstancePolicy: ManageInstancePolicy, options?: any): AxiosPromise<ManageInstancePolicy> {
-            return ManageApiFp(configuration).manageModerationInstancePoliciesUpdate(id, manageInstancePolicy, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {ManageNote} manageNote 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesCreate(manageNote: ManageNote, options?: any): AxiosPromise<ManageNote> {
-            return ManageApiFp(configuration).manageModerationNotesCreate(manageNote, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageModerationNotesDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): AxiosPromise<PaginatedManageNoteList> {
-            return ManageApiFp(configuration).manageModerationNotesList(ordering, page, pageSize, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationNotesRetrieve(uuid: string, options?: any): AxiosPromise<ManageNote> {
-            return ManageApiFp(configuration).manageModerationNotesRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [isHandled] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [submitterEmail] 
-         * @param {'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsList(isHandled?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, submitterEmail?: string, type?: 'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request', options?: any): AxiosPromise<PaginatedManageReportList> {
-            return ManageApiFp(configuration).manageModerationReportsList(isHandled, ordering, page, pageSize, q, submitterEmail, type, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageReport} [patchedManageReport] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsPartialUpdate(uuid: string, patchedManageReport?: PatchedManageReport, options?: any): AxiosPromise<ManageReport> {
-            return ManageApiFp(configuration).manageModerationReportsPartialUpdate(uuid, patchedManageReport, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsRetrieve(uuid: string, options?: any): AxiosPromise<ManageReport> {
-            return ManageApiFp(configuration).manageModerationReportsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageReport} manageReport 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationReportsUpdate(uuid: string, manageReport: ManageReport, options?: any): AxiosPromise<ManageReport> {
-            return ManageApiFp(configuration).manageModerationReportsUpdate(uuid, manageReport, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {'approved' | 'pending' | 'refused'} [status] 
-         * @param {'signup'} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsList(ordering?: string, page?: number, pageSize?: number, q?: string, status?: 'approved' | 'pending' | 'refused', type?: 'signup', options?: any): AxiosPromise<PaginatedManageUserRequestList> {
-            return ManageApiFp(configuration).manageModerationRequestsList(ordering, page, pageSize, q, status, type, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedManageUserRequest} [patchedManageUserRequest] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsPartialUpdate(uuid: string, patchedManageUserRequest?: PatchedManageUserRequest, options?: any): AxiosPromise<ManageUserRequest> {
-            return ManageApiFp(configuration).manageModerationRequestsPartialUpdate(uuid, patchedManageUserRequest, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsRetrieve(uuid: string, options?: any): AxiosPromise<ManageUserRequest> {
-            return ManageApiFp(configuration).manageModerationRequestsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {ManageUserRequest} manageUserRequest 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageModerationRequestsUpdate(uuid: string, manageUserRequest: ManageUserRequest, options?: any): AxiosPromise<ManageUserRequest> {
-            return ManageApiFp(configuration).manageModerationRequestsUpdate(uuid, manageUserRequest, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageTag} manageTag 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsActionCreate(manageTag: ManageTag, options?: any): AxiosPromise<ManageTag> {
-            return ManageApiFp(configuration).manageTagsActionCreate(manageTag, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {ManageTag} manageTag 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsCreate(manageTag: ManageTag, options?: any): AxiosPromise<ManageTag> {
-            return ManageApiFp(configuration).manageTagsCreate(manageTag, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsDestroy(name: string, options?: any): AxiosPromise<void> {
-            return ManageApiFp(configuration).manageTagsDestroy(name, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): AxiosPromise<PaginatedManageTagList> {
-            return ManageApiFp(configuration).manageTagsList(ordering, page, pageSize, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageTagsRetrieve(name: string, options?: any): AxiosPromise<ManageTag> {
-            return ManageApiFp(configuration).manageTagsRetrieve(name, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsActionCreate(manageInvitation?: ManageInvitation, options?: any): AxiosPromise<ManageInvitation> {
-            return ManageApiFp(configuration).manageUsersInvitationsActionCreate(manageInvitation, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsCreate(manageInvitation?: ManageInvitation, options?: any): AxiosPromise<ManageInvitation> {
-            return ManageApiFp(configuration).manageUsersInvitationsCreate(manageInvitation, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [isOpen] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsList(isOpen?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any): AxiosPromise<PaginatedManageInvitationList> {
-            return ManageApiFp(configuration).manageUsersInvitationsList(isOpen, ordering, page, pageSize, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {PatchedManageInvitation} [patchedManageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsPartialUpdate(id: number, patchedManageInvitation?: PatchedManageInvitation, options?: any): AxiosPromise<ManageInvitation> {
-            return ManageApiFp(configuration).manageUsersInvitationsPartialUpdate(id, patchedManageInvitation, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsRetrieve(id: number, options?: any): AxiosPromise<ManageInvitation> {
-            return ManageApiFp(configuration).manageUsersInvitationsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this invitation.
-         * @param {ManageInvitation} [manageInvitation] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersInvitationsUpdate(id: number, manageInvitation?: ManageInvitation, options?: any): AxiosPromise<ManageInvitation> {
-            return ManageApiFp(configuration).manageUsersInvitationsUpdate(id, manageInvitation, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [isActive] 
-         * @param {boolean} [isStaff] 
-         * @param {boolean} [isSuperuser] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [permissionLibrary] 
-         * @param {boolean} [permissionModeration] 
-         * @param {boolean} [permissionSettings] 
-         * @param {'everyone' | 'followers' | 'instance' | 'me'} [privacyLevel] 
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersList(isActive?: boolean, isStaff?: boolean, isSuperuser?: boolean, ordering?: string, page?: number, pageSize?: number, permissionLibrary?: boolean, permissionModeration?: boolean, permissionSettings?: boolean, privacyLevel?: 'everyone' | 'followers' | 'instance' | 'me', q?: string, options?: any): AxiosPromise<PaginatedManageUserList> {
-            return ManageApiFp(configuration).manageUsersUsersList(isActive, isStaff, isSuperuser, ordering, page, pageSize, permissionLibrary, permissionModeration, permissionSettings, privacyLevel, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {PatchedManageUser} [patchedManageUser] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersPartialUpdate(id: number, patchedManageUser?: PatchedManageUser, options?: any): AxiosPromise<ManageUser> {
-            return ManageApiFp(configuration).manageUsersUsersPartialUpdate(id, patchedManageUser, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersRetrieve(id: number, options?: any): AxiosPromise<ManageUser> {
-            return ManageApiFp(configuration).manageUsersUsersRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this user.
-         * @param {ManageUser} manageUser 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        manageUsersUsersUpdate(id: number, manageUser: ManageUser, options?: any): AxiosPromise<ManageUser> {
-            return ManageApiFp(configuration).manageUsersUsersUpdate(id, manageUser, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * ManageApi - object-oriented interface
- * @export
- * @class ManageApi
- * @extends {BaseAPI}
- */
-export class ManageApi extends BaseAPI {
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageActor} manageActor 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageAccountsActionCreate(manageActor: ManageActor, options?: any) {
-        return ManageApiFp(this.configuration).manageAccountsActionCreate(manageActor, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [domain] 
-     * @param {boolean} [local] 
-     * @param {boolean} [manuallyApprovesFollowers] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone'} [type] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageAccountsList(domain?: string, local?: boolean, manuallyApprovesFollowers?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: 'Application' | 'Group' | 'Organization' | 'Person' | 'Service' | 'Tombstone', options?: any) {
-        return ManageApiFp(this.configuration).manageAccountsList(domain, local, manuallyApprovesFollowers, ordering, page, pageSize, q, type, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} id 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageAccountsRetrieve(id: string, options?: any) {
-        return ManageApiFp(this.configuration).manageAccountsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} id 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageAccountsStatsRetrieve(id: string, options?: any) {
-        return ManageApiFp(this.configuration).manageAccountsStatsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageChannelsDestroy(composite: string, options?: any) {
-        return ManageApiFp(this.configuration).manageChannelsDestroy(composite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageChannelsList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageChannelsList(ordering, page, pageSize, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageChannelsRetrieve(composite: string, options?: any) {
-        return ManageApiFp(this.configuration).manageChannelsRetrieve(composite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} composite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageChannelsStatsRetrieve(composite: string, options?: any) {
-        return ManageApiFp(this.configuration).manageChannelsStatsRetrieve(composite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageDomain} manageDomain 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsActionCreate(manageDomain: ManageDomain, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsActionCreate(manageDomain, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {ManageDomain} manageDomain 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsCreate(manageDomain: ManageDomain, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsCreate(manageDomain, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [allowed] 
-     * @param {string} [name] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsList(allowed?: boolean, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsList(allowed, name, ordering, page, pageSize, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name A unique value identifying this domain.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsNodeinfoRetrieve(name: string, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsNodeinfoRetrieve(name, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name A unique value identifying this domain.
-     * @param {PatchedManageDomainUpdate} [patchedManageDomainUpdate] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsPartialUpdate(name: string, patchedManageDomainUpdate?: PatchedManageDomainUpdate, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsPartialUpdate(name, patchedManageDomainUpdate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name A unique value identifying this domain.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsRetrieve(name: string, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsRetrieve(name, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name A unique value identifying this domain.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsStatsRetrieve(name: string, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsStatsRetrieve(name, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name A unique value identifying this domain.
-     * @param {ManageDomainUpdate} [manageDomainUpdate] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageFederationDomainsUpdate(name: string, manageDomainUpdate?: ManageDomainUpdate, options?: any) {
-        return ManageApiFp(this.configuration).manageFederationDomainsUpdate(name, manageDomainUpdate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageAlbum} manageAlbum 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryAlbumsActionCreate(manageAlbum: ManageAlbum, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryAlbumsActionCreate(manageAlbum, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryAlbumsDestroy(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryAlbumsDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} [artist] 
-     * @param {string} [fid] 
-     * @param {string} [mbid] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {string} [title] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryAlbumsList(artist?: number, fid?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryAlbumsList(artist, fid, mbid, ordering, page, pageSize, q, title, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryAlbumsRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryAlbumsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this album.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryAlbumsStatsRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryAlbumsStatsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageArtist} manageArtist 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryArtistsActionCreate(manageArtist: ManageArtist, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryArtistsActionCreate(manageArtist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryArtistsDestroy(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryArtistsDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {'music' | 'other' | 'podcast'} [contentCategory] 
-     * @param {string} [fid] 
-     * @param {string} [mbid] 
-     * @param {string} [name] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryArtistsList(contentCategory?: 'music' | 'other' | 'podcast', fid?: string, mbid?: string, name?: string, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryArtistsList(contentCategory, fid, mbid, name, ordering, page, pageSize, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryArtistsRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryArtistsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this artist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryArtistsStatsRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryArtistsStatsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageLibrary} manageLibrary 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryLibrariesActionCreate(manageLibrary: ManageLibrary, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryLibrariesActionCreate(manageLibrary, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryLibrariesDestroy(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryLibrariesDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [domain] 
-     * @param {string} [fid] 
-     * @param {string} [name] 
-     * @param {Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>} [ordering] Ordering
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {'everyone' | 'instance' | 'me'} [privacyLevel] 
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryLibrariesList(domain?: string, fid?: string, name?: string, ordering?: Array<'-creation_date' | '-followers_count' | '-uploads_count' | 'creation_date' | 'followers_count' | 'uploads_count'>, page?: number, pageSize?: number, privacyLevel?: 'everyone' | 'instance' | 'me', q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryLibrariesList(domain, fid, name, ordering, page, pageSize, privacyLevel, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {PatchedManageLibrary} [patchedManageLibrary] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryLibrariesPartialUpdate(uuid: string, patchedManageLibrary?: PatchedManageLibrary, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryLibrariesPartialUpdate(uuid, patchedManageLibrary, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryLibrariesRetrieve(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryLibrariesRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryLibrariesStatsRetrieve(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryLibrariesStatsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {ManageLibrary} manageLibrary 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryLibrariesUpdate(uuid: string, manageLibrary: ManageLibrary, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryLibrariesUpdate(uuid, manageLibrary, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageTrack} manageTrack 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryTracksActionCreate(manageTrack: ManageTrack, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryTracksActionCreate(manageTrack, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryTracksDestroy(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryTracksDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} [album] 
-     * @param {number} [artist] 
-     * @param {string} [fid] 
-     * @param {string} [license] 
-     * @param {string} [mbid] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {string} [title] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryTracksList(album?: number, artist?: number, fid?: string, license?: string, mbid?: string, ordering?: string, page?: number, pageSize?: number, q?: string, title?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryTracksList(album, artist, fid, license, mbid, ordering, page, pageSize, q, title, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryTracksRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryTracksRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryTracksStatsRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryTracksStatsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageUpload} manageUpload 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryUploadsActionCreate(manageUpload: ManageUpload, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryUploadsActionCreate(manageUpload, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryUploadsDestroy(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryUploadsDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [domain] 
-     * @param {string} [fid] 
-     * @param {string} [importReference] 
-     * @param {'draft' | 'errored' | 'finished' | 'pending' | 'skipped'} [importStatus] 
-     * @param {string} [mimetype] 
-     * @param {Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>} [ordering] Ordering
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [privacyLevel] 
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryUploadsList(domain?: string, fid?: string, importReference?: string, importStatus?: 'draft' | 'errored' | 'finished' | 'pending' | 'skipped', mimetype?: string, ordering?: Array<'-accessed_date' | '-bitrate' | '-creation_date' | '-duration' | '-modification_date' | '-size' | 'accessed_date' | 'bitrate' | 'creation_date' | 'duration' | 'modification_date' | 'size'>, page?: number, pageSize?: number, privacyLevel?: string, q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryUploadsList(domain, fid, importReference, importStatus, mimetype, ordering, page, pageSize, privacyLevel, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageLibraryUploadsRetrieve(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageLibraryUploadsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {ManageInstancePolicy} manageInstancePolicy 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationInstancePoliciesCreate(manageInstancePolicy: ManageInstancePolicy, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationInstancePoliciesCreate(manageInstancePolicy, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this instance policy.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationInstancePoliciesDestroy(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationInstancePoliciesDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [blockAll] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {boolean} [rejectMedia] 
-     * @param {boolean} [silenceActivity] 
-     * @param {boolean} [silenceNotifications] 
-     * @param {string} [targetAccountDomain] 
-     * @param {string} [targetAccountUsername] 
-     * @param {string} [targetDomain] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationInstancePoliciesList(blockAll?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, rejectMedia?: boolean, silenceActivity?: boolean, silenceNotifications?: boolean, targetAccountDomain?: string, targetAccountUsername?: string, targetDomain?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationInstancePoliciesList(blockAll, ordering, page, pageSize, q, rejectMedia, silenceActivity, silenceNotifications, targetAccountDomain, targetAccountUsername, targetDomain, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this instance policy.
-     * @param {PatchedManageInstancePolicy} [patchedManageInstancePolicy] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationInstancePoliciesPartialUpdate(id: number, patchedManageInstancePolicy?: PatchedManageInstancePolicy, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationInstancePoliciesPartialUpdate(id, patchedManageInstancePolicy, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this instance policy.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationInstancePoliciesRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationInstancePoliciesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this instance policy.
-     * @param {ManageInstancePolicy} manageInstancePolicy 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationInstancePoliciesUpdate(id: number, manageInstancePolicy: ManageInstancePolicy, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationInstancePoliciesUpdate(id, manageInstancePolicy, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {ManageNote} manageNote 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationNotesCreate(manageNote: ManageNote, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationNotesCreate(manageNote, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationNotesDestroy(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationNotesDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationNotesList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationNotesList(ordering, page, pageSize, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationNotesRetrieve(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationNotesRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [isHandled] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {string} [submitterEmail] 
-     * @param {'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request'} [type] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationReportsList(isHandled?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, submitterEmail?: string, type?: 'illegal_content' | 'invalid_metadata' | 'offensive_content' | 'other' | 'takedown_request', options?: any) {
-        return ManageApiFp(this.configuration).manageModerationReportsList(isHandled, ordering, page, pageSize, q, submitterEmail, type, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {PatchedManageReport} [patchedManageReport] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationReportsPartialUpdate(uuid: string, patchedManageReport?: PatchedManageReport, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationReportsPartialUpdate(uuid, patchedManageReport, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationReportsRetrieve(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationReportsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {ManageReport} manageReport 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationReportsUpdate(uuid: string, manageReport: ManageReport, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationReportsUpdate(uuid, manageReport, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {'approved' | 'pending' | 'refused'} [status] 
-     * @param {'signup'} [type] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationRequestsList(ordering?: string, page?: number, pageSize?: number, q?: string, status?: 'approved' | 'pending' | 'refused', type?: 'signup', options?: any) {
-        return ManageApiFp(this.configuration).manageModerationRequestsList(ordering, page, pageSize, q, status, type, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {PatchedManageUserRequest} [patchedManageUserRequest] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationRequestsPartialUpdate(uuid: string, patchedManageUserRequest?: PatchedManageUserRequest, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationRequestsPartialUpdate(uuid, patchedManageUserRequest, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationRequestsRetrieve(uuid: string, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationRequestsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {ManageUserRequest} manageUserRequest 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageModerationRequestsUpdate(uuid: string, manageUserRequest: ManageUserRequest, options?: any) {
-        return ManageApiFp(this.configuration).manageModerationRequestsUpdate(uuid, manageUserRequest, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageTag} manageTag 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageTagsActionCreate(manageTag: ManageTag, options?: any) {
-        return ManageApiFp(this.configuration).manageTagsActionCreate(manageTag, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {ManageTag} manageTag 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageTagsCreate(manageTag: ManageTag, options?: any) {
-        return ManageApiFp(this.configuration).manageTagsCreate(manageTag, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageTagsDestroy(name: string, options?: any) {
-        return ManageApiFp(this.configuration).manageTagsDestroy(name, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageTagsList(ordering?: string, page?: number, pageSize?: number, q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageTagsList(ordering, page, pageSize, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageTagsRetrieve(name: string, options?: any) {
-        return ManageApiFp(this.configuration).manageTagsRetrieve(name, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {ManageInvitation} [manageInvitation] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersInvitationsActionCreate(manageInvitation?: ManageInvitation, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersInvitationsActionCreate(manageInvitation, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {ManageInvitation} [manageInvitation] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersInvitationsCreate(manageInvitation?: ManageInvitation, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersInvitationsCreate(manageInvitation, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [isOpen] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersInvitationsList(isOpen?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersInvitationsList(isOpen, ordering, page, pageSize, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this invitation.
-     * @param {PatchedManageInvitation} [patchedManageInvitation] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersInvitationsPartialUpdate(id: number, patchedManageInvitation?: PatchedManageInvitation, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersInvitationsPartialUpdate(id, patchedManageInvitation, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this invitation.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersInvitationsRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersInvitationsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this invitation.
-     * @param {ManageInvitation} [manageInvitation] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersInvitationsUpdate(id: number, manageInvitation?: ManageInvitation, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersInvitationsUpdate(id, manageInvitation, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [isActive] 
-     * @param {boolean} [isStaff] 
-     * @param {boolean} [isSuperuser] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {boolean} [permissionLibrary] 
-     * @param {boolean} [permissionModeration] 
-     * @param {boolean} [permissionSettings] 
-     * @param {'everyone' | 'followers' | 'instance' | 'me'} [privacyLevel] 
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersUsersList(isActive?: boolean, isStaff?: boolean, isSuperuser?: boolean, ordering?: string, page?: number, pageSize?: number, permissionLibrary?: boolean, permissionModeration?: boolean, permissionSettings?: boolean, privacyLevel?: 'everyone' | 'followers' | 'instance' | 'me', q?: string, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersUsersList(isActive, isStaff, isSuperuser, ordering, page, pageSize, permissionLibrary, permissionModeration, permissionSettings, privacyLevel, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this user.
-     * @param {PatchedManageUser} [patchedManageUser] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersUsersPartialUpdate(id: number, patchedManageUser?: PatchedManageUser, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersUsersPartialUpdate(id, patchedManageUser, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this user.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersUsersRetrieve(id: number, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersUsersRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this user.
-     * @param {ManageUser} manageUser 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ManageApi
-     */
-    public manageUsersUsersUpdate(id: number, manageUser: ManageUser, options?: any) {
-        return ManageApiFp(this.configuration).manageUsersUsersUpdate(id, manageUser, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/moderation-api.ts b/api/moderation-api.ts
deleted file mode 100644
index 17ccb23cea208dd6e2feaecf7982e54d37085a5c..0000000000000000000000000000000000000000
--- a/api/moderation-api.ts
+++ /dev/null
@@ -1,512 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedUserFilterList } from '../types';
-// @ts-ignore
-import { Report } from '../types';
-// @ts-ignore
-import { UserFilter } from '../types';
-/**
- * ModerationApi - axios parameter creator
- * @export
- */
-export const ModerationApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {UserFilter} userFilter 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersCreate: async (userFilter: UserFilter, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userFilter' is not null or undefined
-            if (userFilter === null || userFilter === undefined) {
-                throw new RequiredError('userFilter','Required parameter userFilter was null or undefined when calling moderationContentFiltersCreate.');
-            }
-            const localVarPath = `/api/v1/moderation/content-filters/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userFilter !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userFilter !== undefined ? userFilter : {}) : (userFilter || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling moderationContentFiltersDestroy.');
-            }
-            const localVarPath = `/api/v1/moderation/content-filters/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersList: async (ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/moderation/content-filters/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling moderationContentFiltersRetrieve.');
-            }
-            const localVarPath = `/api/v1/moderation/content-filters/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {Report} report 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationReportsCreate: async (report: Report, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'report' is not null or undefined
-            if (report === null || report === undefined) {
-                throw new RequiredError('report','Required parameter report was null or undefined when calling moderationReportsCreate.');
-            }
-            const localVarPath = `/api/v1/moderation/reports/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof report !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(report !== undefined ? report : {}) : (report || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * ModerationApi - functional programming interface
- * @export
- */
-export const ModerationApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {UserFilter} userFilter 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async moderationContentFiltersCreate(userFilter: UserFilter, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserFilter>> {
-            const localVarAxiosArgs = await ModerationApiAxiosParamCreator(configuration).moderationContentFiltersCreate(userFilter, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async moderationContentFiltersDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await ModerationApiAxiosParamCreator(configuration).moderationContentFiltersDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async moderationContentFiltersList(ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedUserFilterList>> {
-            const localVarAxiosArgs = await ModerationApiAxiosParamCreator(configuration).moderationContentFiltersList(ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async moderationContentFiltersRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserFilter>> {
-            const localVarAxiosArgs = await ModerationApiAxiosParamCreator(configuration).moderationContentFiltersRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {Report} report 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async moderationReportsCreate(report: Report, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Report>> {
-            const localVarAxiosArgs = await ModerationApiAxiosParamCreator(configuration).moderationReportsCreate(report, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * ModerationApi - factory interface
- * @export
- */
-export const ModerationApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {UserFilter} userFilter 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersCreate(userFilter: UserFilter, options?: any): AxiosPromise<UserFilter> {
-            return ModerationApiFp(configuration).moderationContentFiltersCreate(userFilter, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return ModerationApiFp(configuration).moderationContentFiltersDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersList(ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<PaginatedUserFilterList> {
-            return ModerationApiFp(configuration).moderationContentFiltersList(ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationContentFiltersRetrieve(uuid: string, options?: any): AxiosPromise<UserFilter> {
-            return ModerationApiFp(configuration).moderationContentFiltersRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {Report} report 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        moderationReportsCreate(report: Report, options?: any): AxiosPromise<Report> {
-            return ModerationApiFp(configuration).moderationReportsCreate(report, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * ModerationApi - object-oriented interface
- * @export
- * @class ModerationApi
- * @extends {BaseAPI}
- */
-export class ModerationApi extends BaseAPI {
-    /**
-     * 
-     * @param {UserFilter} userFilter 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ModerationApi
-     */
-    public moderationContentFiltersCreate(userFilter: UserFilter, options?: any) {
-        return ModerationApiFp(this.configuration).moderationContentFiltersCreate(userFilter, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ModerationApi
-     */
-    public moderationContentFiltersDestroy(uuid: string, options?: any) {
-        return ModerationApiFp(this.configuration).moderationContentFiltersDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ModerationApi
-     */
-    public moderationContentFiltersList(ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return ModerationApiFp(this.configuration).moderationContentFiltersList(ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ModerationApi
-     */
-    public moderationContentFiltersRetrieve(uuid: string, options?: any) {
-        return ModerationApiFp(this.configuration).moderationContentFiltersRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {Report} report 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof ModerationApi
-     */
-    public moderationReportsCreate(report: Report, options?: any) {
-        return ModerationApiFp(this.configuration).moderationReportsCreate(report, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/mutations-api.ts b/api/mutations-api.ts
deleted file mode 100644
index 20c5c1e2a28430436df71245b94c69f3c493767f..0000000000000000000000000000000000000000
--- a/api/mutations-api.ts
+++ /dev/null
@@ -1,560 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { APIMutation } from '../types';
-// @ts-ignore
-import { PaginatedAPIMutationList } from '../types';
-/**
- * MutationsApi - axios parameter creator
- * @export
- */
-export const MutationsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {APIMutation} aPIMutation 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsApproveCreate: async (uuid: string, aPIMutation: APIMutation, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling mutationsApproveCreate.');
-            }
-            // verify required parameter 'aPIMutation' is not null or undefined
-            if (aPIMutation === null || aPIMutation === undefined) {
-                throw new RequiredError('aPIMutation','Required parameter aPIMutation was null or undefined when calling mutationsApproveCreate.');
-            }
-            const localVarPath = `/api/v1/mutations/{uuid}/approve/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof aPIMutation !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(aPIMutation !== undefined ? aPIMutation : {}) : (aPIMutation || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling mutationsDestroy.');
-            }
-            const localVarPath = `/api/v1/mutations/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isApplied] 
-         * @param {boolean} [isApproved] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsList: async (isApplied?: boolean, isApproved?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/mutations/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (isApplied !== undefined) {
-                localVarQueryParameter['is_applied'] = isApplied;
-            }
-
-            if (isApproved !== undefined) {
-                localVarQueryParameter['is_approved'] = isApproved;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (type !== undefined) {
-                localVarQueryParameter['type'] = type;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {APIMutation} aPIMutation 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsRejectCreate: async (uuid: string, aPIMutation: APIMutation, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling mutationsRejectCreate.');
-            }
-            // verify required parameter 'aPIMutation' is not null or undefined
-            if (aPIMutation === null || aPIMutation === undefined) {
-                throw new RequiredError('aPIMutation','Required parameter aPIMutation was null or undefined when calling mutationsRejectCreate.');
-            }
-            const localVarPath = `/api/v1/mutations/{uuid}/reject/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof aPIMutation !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(aPIMutation !== undefined ? aPIMutation : {}) : (aPIMutation || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling mutationsRetrieve.');
-            }
-            const localVarPath = `/api/v1/mutations/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * MutationsApi - functional programming interface
- * @export
- */
-export const MutationsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {APIMutation} aPIMutation 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async mutationsApproveCreate(uuid: string, aPIMutation: APIMutation, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<APIMutation>> {
-            const localVarAxiosArgs = await MutationsApiAxiosParamCreator(configuration).mutationsApproveCreate(uuid, aPIMutation, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async mutationsDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await MutationsApiAxiosParamCreator(configuration).mutationsDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {boolean} [isApplied] 
-         * @param {boolean} [isApproved] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async mutationsList(isApplied?: boolean, isApproved?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedAPIMutationList>> {
-            const localVarAxiosArgs = await MutationsApiAxiosParamCreator(configuration).mutationsList(isApplied, isApproved, ordering, page, pageSize, q, type, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {APIMutation} aPIMutation 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async mutationsRejectCreate(uuid: string, aPIMutation: APIMutation, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<APIMutation>> {
-            const localVarAxiosArgs = await MutationsApiAxiosParamCreator(configuration).mutationsRejectCreate(uuid, aPIMutation, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async mutationsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<APIMutation>> {
-            const localVarAxiosArgs = await MutationsApiAxiosParamCreator(configuration).mutationsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * MutationsApi - factory interface
- * @export
- */
-export const MutationsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {APIMutation} aPIMutation 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsApproveCreate(uuid: string, aPIMutation: APIMutation, options?: any): AxiosPromise<APIMutation> {
-            return MutationsApiFp(configuration).mutationsApproveCreate(uuid, aPIMutation, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return MutationsApiFp(configuration).mutationsDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {boolean} [isApplied] 
-         * @param {boolean} [isApproved] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [type] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsList(isApplied?: boolean, isApproved?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: string, options?: any): AxiosPromise<PaginatedAPIMutationList> {
-            return MutationsApiFp(configuration).mutationsList(isApplied, isApproved, ordering, page, pageSize, q, type, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {APIMutation} aPIMutation 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsRejectCreate(uuid: string, aPIMutation: APIMutation, options?: any): AxiosPromise<APIMutation> {
-            return MutationsApiFp(configuration).mutationsRejectCreate(uuid, aPIMutation, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        mutationsRetrieve(uuid: string, options?: any): AxiosPromise<APIMutation> {
-            return MutationsApiFp(configuration).mutationsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * MutationsApi - object-oriented interface
- * @export
- * @class MutationsApi
- * @extends {BaseAPI}
- */
-export class MutationsApi extends BaseAPI {
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {APIMutation} aPIMutation 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof MutationsApi
-     */
-    public mutationsApproveCreate(uuid: string, aPIMutation: APIMutation, options?: any) {
-        return MutationsApiFp(this.configuration).mutationsApproveCreate(uuid, aPIMutation, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof MutationsApi
-     */
-    public mutationsDestroy(uuid: string, options?: any) {
-        return MutationsApiFp(this.configuration).mutationsDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {boolean} [isApplied] 
-     * @param {boolean} [isApproved] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {string} [type] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof MutationsApi
-     */
-    public mutationsList(isApplied?: boolean, isApproved?: boolean, ordering?: string, page?: number, pageSize?: number, q?: string, type?: string, options?: any) {
-        return MutationsApiFp(this.configuration).mutationsList(isApplied, isApproved, ordering, page, pageSize, q, type, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {APIMutation} aPIMutation 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof MutationsApi
-     */
-    public mutationsRejectCreate(uuid: string, aPIMutation: APIMutation, options?: any) {
-        return MutationsApiFp(this.configuration).mutationsRejectCreate(uuid, aPIMutation, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof MutationsApi
-     */
-    public mutationsRetrieve(uuid: string, options?: any) {
-        return MutationsApiFp(this.configuration).mutationsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/oauth-api.ts b/api/oauth-api.ts
deleted file mode 100644
index a826cba082d8cac36f8aff9efe1b8b6b64f28486..0000000000000000000000000000000000000000
--- a/api/oauth-api.ts
+++ /dev/null
@@ -1,1203 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Application } from '../types';
-// @ts-ignore
-import { CreateApplication } from '../types';
-// @ts-ignore
-import { PaginatedApplicationList } from '../types';
-// @ts-ignore
-import { PatchedApplication } from '../types';
-/**
- * OauthApi - axios parameter creator
- * @export
- */
-export const OauthApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {CreateApplication} createApplication 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsCreate: async (createApplication: CreateApplication, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'createApplication' is not null or undefined
-            if (createApplication === null || createApplication === undefined) {
-                throw new RequiredError('createApplication','Required parameter createApplication was null or undefined when calling oauthAppsCreate.');
-            }
-            const localVarPath = `/api/v1/oauth/apps/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof createApplication !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(createApplication !== undefined ? createApplication : {}) : (createApplication || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsDestroy: async (clientId: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'clientId' is not null or undefined
-            if (clientId === null || clientId === undefined) {
-                throw new RequiredError('clientId','Required parameter clientId was null or undefined when calling oauthAppsDestroy.');
-            }
-            const localVarPath = `/api/v1/oauth/apps/{client_id}/`
-                .replace(`{${"client_id"}}`, encodeURIComponent(String(clientId)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsList: async (ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/oauth/apps/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {PatchedApplication} [patchedApplication] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsPartialUpdate: async (clientId: string, patchedApplication?: PatchedApplication, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'clientId' is not null or undefined
-            if (clientId === null || clientId === undefined) {
-                throw new RequiredError('clientId','Required parameter clientId was null or undefined when calling oauthAppsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/oauth/apps/{client_id}/`
-                .replace(`{${"client_id"}}`, encodeURIComponent(String(clientId)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedApplication !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedApplication !== undefined ? patchedApplication : {}) : (patchedApplication || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {CreateApplication} createApplication 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsRefreshTokenCreate: async (clientId: string, createApplication: CreateApplication, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'clientId' is not null or undefined
-            if (clientId === null || clientId === undefined) {
-                throw new RequiredError('clientId','Required parameter clientId was null or undefined when calling oauthAppsRefreshTokenCreate.');
-            }
-            // verify required parameter 'createApplication' is not null or undefined
-            if (createApplication === null || createApplication === undefined) {
-                throw new RequiredError('createApplication','Required parameter createApplication was null or undefined when calling oauthAppsRefreshTokenCreate.');
-            }
-            const localVarPath = `/api/v1/oauth/apps/{client_id}/refresh-token/`
-                .replace(`{${"client_id"}}`, encodeURIComponent(String(clientId)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof createApplication !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(createApplication !== undefined ? createApplication : {}) : (createApplication || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsRetrieve: async (clientId: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'clientId' is not null or undefined
-            if (clientId === null || clientId === undefined) {
-                throw new RequiredError('clientId','Required parameter clientId was null or undefined when calling oauthAppsRetrieve.');
-            }
-            const localVarPath = `/api/v1/oauth/apps/{client_id}/`
-                .replace(`{${"client_id"}}`, encodeURIComponent(String(clientId)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {Application} application 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsUpdate: async (clientId: string, application: Application, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'clientId' is not null or undefined
-            if (clientId === null || clientId === undefined) {
-                throw new RequiredError('clientId','Required parameter clientId was null or undefined when calling oauthAppsUpdate.');
-            }
-            // verify required parameter 'application' is not null or undefined
-            if (application === null || application === undefined) {
-                throw new RequiredError('application','Required parameter application was null or undefined when calling oauthAppsUpdate.');
-            }
-            const localVarPath = `/api/v1/oauth/apps/{client_id}/`
-                .replace(`{${"client_id"}}`, encodeURIComponent(String(clientId)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof application !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(application !== undefined ? application : {}) : (application || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Handle POST requests: instantiate a form instance with the passed POST variables and then check if it\'s valid.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAuthorizeCreate: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/oauth/authorize/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Handle GET requests: instantiate a blank version of the form.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAuthorizeRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/oauth/authorize/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAuthorizeUpdate: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/oauth/authorize/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthGrantsDestroy: async (clientId: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'clientId' is not null or undefined
-            if (clientId === null || clientId === undefined) {
-                throw new RequiredError('clientId','Required parameter clientId was null or undefined when calling oauthGrantsDestroy.');
-            }
-            const localVarPath = `/api/v1/oauth/grants/{client_id}/`
-                .replace(`{${"client_id"}}`, encodeURIComponent(String(clientId)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthGrantsList: async (ordering?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/oauth/grants/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthGrantsRetrieve: async (clientId: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'clientId' is not null or undefined
-            if (clientId === null || clientId === undefined) {
-                throw new RequiredError('clientId','Required parameter clientId was null or undefined when calling oauthGrantsRetrieve.');
-            }
-            const localVarPath = `/api/v1/oauth/grants/{client_id}/`
-                .replace(`{${"client_id"}}`, encodeURIComponent(String(clientId)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * OauthApi - functional programming interface
- * @export
- */
-export const OauthApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {CreateApplication} createApplication 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAppsCreate(createApplication: CreateApplication, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateApplication>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAppsCreate(createApplication, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAppsDestroy(clientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAppsDestroy(clientId, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAppsList(ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedApplicationList>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAppsList(ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {PatchedApplication} [patchedApplication] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAppsPartialUpdate(clientId: string, patchedApplication?: PatchedApplication, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Application>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAppsPartialUpdate(clientId, patchedApplication, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {CreateApplication} createApplication 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAppsRefreshTokenCreate(clientId: string, createApplication: CreateApplication, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<CreateApplication>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAppsRefreshTokenCreate(clientId, createApplication, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAppsRetrieve(clientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Application>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAppsRetrieve(clientId, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {Application} application 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAppsUpdate(clientId: string, application: Application, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Application>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAppsUpdate(clientId, application, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Handle POST requests: instantiate a form instance with the passed POST variables and then check if it\'s valid.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAuthorizeCreate(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAuthorizeCreate(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Handle GET requests: instantiate a blank version of the form.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAuthorizeRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAuthorizeRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthAuthorizeUpdate(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthAuthorizeUpdate(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthGrantsDestroy(clientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthGrantsDestroy(clientId, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthGrantsList(ordering?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Array<Application>>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthGrantsList(ordering, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oauthGrantsRetrieve(clientId: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Application>> {
-            const localVarAxiosArgs = await OauthApiAxiosParamCreator(configuration).oauthGrantsRetrieve(clientId, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * OauthApi - factory interface
- * @export
- */
-export const OauthApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {CreateApplication} createApplication 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsCreate(createApplication: CreateApplication, options?: any): AxiosPromise<CreateApplication> {
-            return OauthApiFp(configuration).oauthAppsCreate(createApplication, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsDestroy(clientId: string, options?: any): AxiosPromise<void> {
-            return OauthApiFp(configuration).oauthAppsDestroy(clientId, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsList(ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<PaginatedApplicationList> {
-            return OauthApiFp(configuration).oauthAppsList(ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {PatchedApplication} [patchedApplication] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsPartialUpdate(clientId: string, patchedApplication?: PatchedApplication, options?: any): AxiosPromise<Application> {
-            return OauthApiFp(configuration).oauthAppsPartialUpdate(clientId, patchedApplication, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {CreateApplication} createApplication 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsRefreshTokenCreate(clientId: string, createApplication: CreateApplication, options?: any): AxiosPromise<CreateApplication> {
-            return OauthApiFp(configuration).oauthAppsRefreshTokenCreate(clientId, createApplication, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsRetrieve(clientId: string, options?: any): AxiosPromise<Application> {
-            return OauthApiFp(configuration).oauthAppsRetrieve(clientId, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} clientId 
-         * @param {Application} application 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAppsUpdate(clientId: string, application: Application, options?: any): AxiosPromise<Application> {
-            return OauthApiFp(configuration).oauthAppsUpdate(clientId, application, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Handle POST requests: instantiate a form instance with the passed POST variables and then check if it\'s valid.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAuthorizeCreate(options?: any): AxiosPromise<void> {
-            return OauthApiFp(configuration).oauthAuthorizeCreate(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Handle GET requests: instantiate a blank version of the form.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAuthorizeRetrieve(options?: any): AxiosPromise<void> {
-            return OauthApiFp(configuration).oauthAuthorizeRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthAuthorizeUpdate(options?: any): AxiosPromise<void> {
-            return OauthApiFp(configuration).oauthAuthorizeUpdate(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthGrantsDestroy(clientId: string, options?: any): AxiosPromise<void> {
-            return OauthApiFp(configuration).oauthGrantsDestroy(clientId, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthGrantsList(ordering?: string, options?: any): AxiosPromise<Array<Application>> {
-            return OauthApiFp(configuration).oauthGrantsList(ordering, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-         * @param {string} clientId 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oauthGrantsRetrieve(clientId: string, options?: any): AxiosPromise<Application> {
-            return OauthApiFp(configuration).oauthGrantsRetrieve(clientId, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * OauthApi - object-oriented interface
- * @export
- * @class OauthApi
- * @extends {BaseAPI}
- */
-export class OauthApi extends BaseAPI {
-    /**
-     * 
-     * @param {CreateApplication} createApplication 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAppsCreate(createApplication: CreateApplication, options?: any) {
-        return OauthApiFp(this.configuration).oauthAppsCreate(createApplication, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} clientId 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAppsDestroy(clientId: string, options?: any) {
-        return OauthApiFp(this.configuration).oauthAppsDestroy(clientId, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAppsList(ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return OauthApiFp(this.configuration).oauthAppsList(ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} clientId 
-     * @param {PatchedApplication} [patchedApplication] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAppsPartialUpdate(clientId: string, patchedApplication?: PatchedApplication, options?: any) {
-        return OauthApiFp(this.configuration).oauthAppsPartialUpdate(clientId, patchedApplication, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} clientId 
-     * @param {CreateApplication} createApplication 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAppsRefreshTokenCreate(clientId: string, createApplication: CreateApplication, options?: any) {
-        return OauthApiFp(this.configuration).oauthAppsRefreshTokenCreate(clientId, createApplication, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} clientId 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAppsRetrieve(clientId: string, options?: any) {
-        return OauthApiFp(this.configuration).oauthAppsRetrieve(clientId, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} clientId 
-     * @param {Application} application 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAppsUpdate(clientId: string, application: Application, options?: any) {
-        return OauthApiFp(this.configuration).oauthAppsUpdate(clientId, application, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Handle POST requests: instantiate a form instance with the passed POST variables and then check if it\'s valid.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAuthorizeCreate(options?: any) {
-        return OauthApiFp(this.configuration).oauthAuthorizeCreate(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Handle GET requests: instantiate a blank version of the form.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAuthorizeRetrieve(options?: any) {
-        return OauthApiFp(this.configuration).oauthAuthorizeRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthAuthorizeUpdate(options?: any) {
-        return OauthApiFp(this.configuration).oauthAuthorizeUpdate(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-     * @param {string} clientId 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthGrantsDestroy(clientId: string, options?: any) {
-        return OauthApiFp(this.configuration).oauthGrantsDestroy(clientId, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthGrantsList(ordering?: string, options?: any) {
-        return OauthApiFp(this.configuration).oauthGrantsList(ordering, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * This is a viewset that list applications that have access to the request user account, to allow revoking tokens easily.
-     * @param {string} clientId 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OauthApi
-     */
-    public oauthGrantsRetrieve(clientId: string, options?: any) {
-        return OauthApiFp(this.configuration).oauthGrantsRetrieve(clientId, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/oembed-api.ts b/api/oembed-api.ts
deleted file mode 100644
index b64242c116f51475709aa8add72debf77d3cdea6..0000000000000000000000000000000000000000
--- a/api/oembed-api.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-/**
- * OembedApi - axios parameter creator
- * @export
- */
-export const OembedApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oembedRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/oembed/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * OembedApi - functional programming interface
- * @export
- */
-export const OembedApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async oembedRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await OembedApiAxiosParamCreator(configuration).oembedRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * OembedApi - factory interface
- * @export
- */
-export const OembedApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        oembedRetrieve(options?: any): AxiosPromise<void> {
-            return OembedApiFp(configuration).oembedRetrieve(options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * OembedApi - object-oriented interface
- * @export
- * @class OembedApi
- * @extends {BaseAPI}
- */
-export class OembedApi extends BaseAPI {
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof OembedApi
-     */
-    public oembedRetrieve(options?: any) {
-        return OembedApiFp(this.configuration).oembedRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/playlists-api.ts b/api/playlists-api.ts
deleted file mode 100644
index c51a3cde171e417f1de013b4bd08b9ebc7e21303..0000000000000000000000000000000000000000
--- a/api/playlists-api.ts
+++ /dev/null
@@ -1,1231 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedPlaylistList } from '../types';
-// @ts-ignore
-import { PatchedPlaylist } from '../types';
-// @ts-ignore
-import { Playlist } from '../types';
-/**
- * PlaylistsApi - axios parameter creator
- * @export
- */
-export const PlaylistsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsAddCreate: async (id: number, playlist: Playlist, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsAddCreate.');
-            }
-            // verify required parameter 'playlist' is not null or undefined
-            if (playlist === null || playlist === undefined) {
-                throw new RequiredError('playlist','Required parameter playlist was null or undefined when calling playlistsAddCreate.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/add/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof playlist !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(playlist !== undefined ? playlist : {}) : (playlist || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsClearDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsClearDestroy.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/clear/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsCreate: async (playlist: Playlist, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'playlist' is not null or undefined
-            if (playlist === null || playlist === undefined) {
-                throw new RequiredError('playlist','Required parameter playlist was null or undefined when calling playlistsCreate.');
-            }
-            const localVarPath = `/api/v1/playlists/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof playlist !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(playlist !== undefined ? playlist : {}) : (playlist || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsDestroy.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} [album] 
-         * @param {number} [artist] 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {number} [track] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsList: async (album?: number, artist?: number, name?: string, nameIcontains?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/playlists/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (album !== undefined) {
-                localVarQueryParameter['album'] = album;
-            }
-
-            if (artist !== undefined) {
-                localVarQueryParameter['artist'] = artist;
-            }
-
-            if (name !== undefined) {
-                localVarQueryParameter['name'] = name;
-            }
-
-            if (nameIcontains !== undefined) {
-                localVarQueryParameter['name__icontains'] = nameIcontains;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (playable !== undefined) {
-                localVarQueryParameter['playable'] = playable;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-            if (track !== undefined) {
-                localVarQueryParameter['track'] = track;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsMoveCreate: async (id: number, playlist: Playlist, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsMoveCreate.');
-            }
-            // verify required parameter 'playlist' is not null or undefined
-            if (playlist === null || playlist === undefined) {
-                throw new RequiredError('playlist','Required parameter playlist was null or undefined when calling playlistsMoveCreate.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/move/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof playlist !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(playlist !== undefined ? playlist : {}) : (playlist || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {PatchedPlaylist} [patchedPlaylist] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsPartialUpdate: async (id: number, patchedPlaylist?: PatchedPlaylist, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedPlaylist !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedPlaylist !== undefined ? patchedPlaylist : {}) : (patchedPlaylist || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsRemoveCreate: async (id: number, playlist: Playlist, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsRemoveCreate.');
-            }
-            // verify required parameter 'playlist' is not null or undefined
-            if (playlist === null || playlist === undefined) {
-                throw new RequiredError('playlist','Required parameter playlist was null or undefined when calling playlistsRemoveCreate.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/remove/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof playlist !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(playlist !== undefined ? playlist : {}) : (playlist || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsRemoveDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsRemoveDestroy.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/remove/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsRetrieve.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsTracksRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsTracksRetrieve.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/tracks/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsUpdate: async (id: number, playlist: Playlist, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling playlistsUpdate.');
-            }
-            // verify required parameter 'playlist' is not null or undefined
-            if (playlist === null || playlist === undefined) {
-                throw new RequiredError('playlist','Required parameter playlist was null or undefined when calling playlistsUpdate.');
-            }
-            const localVarPath = `/api/v1/playlists/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof playlist !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(playlist !== undefined ? playlist : {}) : (playlist || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * PlaylistsApi - functional programming interface
- * @export
- */
-export const PlaylistsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsAddCreate(id: number, playlist: Playlist, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsAddCreate(id, playlist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsClearDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsClearDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsCreate(playlist: Playlist, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsCreate(playlist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} [album] 
-         * @param {number} [artist] 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {number} [track] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsList(album?: number, artist?: number, name?: string, nameIcontains?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedPlaylistList>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsList(album, artist, name, nameIcontains, ordering, page, pageSize, playable, q, scope, track, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsMoveCreate(id: number, playlist: Playlist, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsMoveCreate(id, playlist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {PatchedPlaylist} [patchedPlaylist] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsPartialUpdate(id: number, patchedPlaylist?: PatchedPlaylist, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsPartialUpdate(id, patchedPlaylist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsRemoveCreate(id: number, playlist: Playlist, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsRemoveCreate(id, playlist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsRemoveDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsRemoveDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsTracksRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsTracksRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async playlistsUpdate(id: number, playlist: Playlist, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Playlist>> {
-            const localVarAxiosArgs = await PlaylistsApiAxiosParamCreator(configuration).playlistsUpdate(id, playlist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * PlaylistsApi - factory interface
- * @export
- */
-export const PlaylistsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsAddCreate(id: number, playlist: Playlist, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsAddCreate(id, playlist, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsClearDestroy(id: number, options?: any): AxiosPromise<void> {
-            return PlaylistsApiFp(configuration).playlistsClearDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsCreate(playlist: Playlist, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsCreate(playlist, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsDestroy(id: number, options?: any): AxiosPromise<void> {
-            return PlaylistsApiFp(configuration).playlistsDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} [album] 
-         * @param {number} [artist] 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {number} [track] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsList(album?: number, artist?: number, name?: string, nameIcontains?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: number, options?: any): AxiosPromise<PaginatedPlaylistList> {
-            return PlaylistsApiFp(configuration).playlistsList(album, artist, name, nameIcontains, ordering, page, pageSize, playable, q, scope, track, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsMoveCreate(id: number, playlist: Playlist, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsMoveCreate(id, playlist, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {PatchedPlaylist} [patchedPlaylist] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsPartialUpdate(id: number, patchedPlaylist?: PatchedPlaylist, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsPartialUpdate(id, patchedPlaylist, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsRemoveCreate(id: number, playlist: Playlist, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsRemoveCreate(id, playlist, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsRemoveDestroy(id: number, options?: any): AxiosPromise<void> {
-            return PlaylistsApiFp(configuration).playlistsRemoveDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsRetrieve(id: number, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsTracksRetrieve(id: number, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsTracksRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this playlist.
-         * @param {Playlist} playlist 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        playlistsUpdate(id: number, playlist: Playlist, options?: any): AxiosPromise<Playlist> {
-            return PlaylistsApiFp(configuration).playlistsUpdate(id, playlist, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * PlaylistsApi - object-oriented interface
- * @export
- * @class PlaylistsApi
- * @extends {BaseAPI}
- */
-export class PlaylistsApi extends BaseAPI {
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {Playlist} playlist 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsAddCreate(id: number, playlist: Playlist, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsAddCreate(id, playlist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsClearDestroy(id: number, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsClearDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {Playlist} playlist 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsCreate(playlist: Playlist, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsCreate(playlist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsDestroy(id: number, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} [album] 
-     * @param {number} [artist] 
-     * @param {string} [name] 
-     * @param {string} [nameIcontains] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {boolean} [playable] 
-     * @param {string} [q] 
-     * @param {string} [scope] 
-     * @param {number} [track] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsList(album?: number, artist?: number, name?: string, nameIcontains?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: number, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsList(album, artist, name, nameIcontains, ordering, page, pageSize, playable, q, scope, track, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {Playlist} playlist 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsMoveCreate(id: number, playlist: Playlist, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsMoveCreate(id, playlist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {PatchedPlaylist} [patchedPlaylist] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsPartialUpdate(id: number, patchedPlaylist?: PatchedPlaylist, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsPartialUpdate(id, patchedPlaylist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {Playlist} playlist 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsRemoveCreate(id: number, playlist: Playlist, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsRemoveCreate(id, playlist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsRemoveDestroy(id: number, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsRemoveDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsRetrieve(id: number, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsTracksRetrieve(id: number, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsTracksRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this playlist.
-     * @param {Playlist} playlist 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PlaylistsApi
-     */
-    public playlistsUpdate(id: number, playlist: Playlist, options?: any) {
-        return PlaylistsApiFp(this.configuration).playlistsUpdate(id, playlist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/plugins-api.ts b/api/plugins-api.ts
deleted file mode 100644
index 6b01146b8812632a238f40cfd2c9c56872daaead..0000000000000000000000000000000000000000
--- a/api/plugins-api.ts
+++ /dev/null
@@ -1,577 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-/**
- * PluginsApi - axios parameter creator
- * @export
- */
-export const PluginsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsCreate: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/plugins/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsDisableCreate: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling pluginsDisableCreate.');
-            }
-            const localVarPath = `/api/v1/plugins/{id}/disable/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsEnableCreate: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling pluginsEnableCreate.');
-            }
-            const localVarPath = `/api/v1/plugins/{id}/enable/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsList: async (ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/plugins/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling pluginsRetrieve.');
-            }
-            const localVarPath = `/api/v1/plugins/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsScanCreate: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling pluginsScanCreate.');
-            }
-            const localVarPath = `/api/v1/plugins/{id}/scan/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * PluginsApi - functional programming interface
- * @export
- */
-export const PluginsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async pluginsCreate(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PluginsApiAxiosParamCreator(configuration).pluginsCreate(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async pluginsDisableCreate(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PluginsApiAxiosParamCreator(configuration).pluginsDisableCreate(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async pluginsEnableCreate(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PluginsApiAxiosParamCreator(configuration).pluginsEnableCreate(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async pluginsList(ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PluginsApiAxiosParamCreator(configuration).pluginsList(ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async pluginsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PluginsApiAxiosParamCreator(configuration).pluginsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async pluginsScanCreate(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await PluginsApiAxiosParamCreator(configuration).pluginsScanCreate(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * PluginsApi - factory interface
- * @export
- */
-export const PluginsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsCreate(options?: any): AxiosPromise<void> {
-            return PluginsApiFp(configuration).pluginsCreate(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsDisableCreate(id: number, options?: any): AxiosPromise<void> {
-            return PluginsApiFp(configuration).pluginsDisableCreate(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsEnableCreate(id: number, options?: any): AxiosPromise<void> {
-            return PluginsApiFp(configuration).pluginsEnableCreate(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsList(ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<void> {
-            return PluginsApiFp(configuration).pluginsList(ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsRetrieve(id: number, options?: any): AxiosPromise<void> {
-            return PluginsApiFp(configuration).pluginsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this plugin configuration.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        pluginsScanCreate(id: number, options?: any): AxiosPromise<void> {
-            return PluginsApiFp(configuration).pluginsScanCreate(id, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * PluginsApi - object-oriented interface
- * @export
- * @class PluginsApi
- * @extends {BaseAPI}
- */
-export class PluginsApi extends BaseAPI {
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PluginsApi
-     */
-    public pluginsCreate(options?: any) {
-        return PluginsApiFp(this.configuration).pluginsCreate(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this plugin configuration.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PluginsApi
-     */
-    public pluginsDisableCreate(id: number, options?: any) {
-        return PluginsApiFp(this.configuration).pluginsDisableCreate(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this plugin configuration.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PluginsApi
-     */
-    public pluginsEnableCreate(id: number, options?: any) {
-        return PluginsApiFp(this.configuration).pluginsEnableCreate(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PluginsApi
-     */
-    public pluginsList(ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return PluginsApiFp(this.configuration).pluginsList(ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this plugin configuration.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PluginsApi
-     */
-    public pluginsRetrieve(id: number, options?: any) {
-        return PluginsApiFp(this.configuration).pluginsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this plugin configuration.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof PluginsApi
-     */
-    public pluginsScanCreate(id: number, options?: any) {
-        return PluginsApiFp(this.configuration).pluginsScanCreate(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/radios-api.ts b/api/radios-api.ts
deleted file mode 100644
index 27e60af70a305c9e0317c8c52c7ba2559fec8d2f..0000000000000000000000000000000000000000
--- a/api/radios-api.ts
+++ /dev/null
@@ -1,1183 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedRadioList } from '../types';
-// @ts-ignore
-import { PatchedRadio } from '../types';
-// @ts-ignore
-import { Radio } from '../types';
-// @ts-ignore
-import { RadioSession } from '../types';
-// @ts-ignore
-import { RadioSessionTrackSerializerCreate } from '../types';
-/**
- * RadiosApi - axios parameter creator
- * @export
- */
-export const RadiosApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosCreate: async (radio: Radio, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'radio' is not null or undefined
-            if (radio === null || radio === undefined) {
-                throw new RequiredError('radio','Required parameter radio was null or undefined when calling radiosRadiosCreate.');
-            }
-            const localVarPath = `/api/v1/radios/radios/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof radio !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(radio !== undefined ? radio : {}) : (radio || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling radiosRadiosDestroy.');
-            }
-            const localVarPath = `/api/v1/radios/radios/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosFiltersRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/radios/radios/filters/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [nameIexact] 
-         * @param {string} [nameStartswith] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosList: async (name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/radios/radios/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (name !== undefined) {
-                localVarQueryParameter['name'] = name;
-            }
-
-            if (nameIcontains !== undefined) {
-                localVarQueryParameter['name__icontains'] = nameIcontains;
-            }
-
-            if (nameIexact !== undefined) {
-                localVarQueryParameter['name__iexact'] = nameIexact;
-            }
-
-            if (nameStartswith !== undefined) {
-                localVarQueryParameter['name__startswith'] = nameStartswith;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {PatchedRadio} [patchedRadio] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosPartialUpdate: async (id: number, patchedRadio?: PatchedRadio, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling radiosRadiosPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/radios/radios/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedRadio !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedRadio !== undefined ? patchedRadio : {}) : (patchedRadio || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling radiosRadiosRetrieve.');
-            }
-            const localVarPath = `/api/v1/radios/radios/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosTracksRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling radiosRadiosTracksRetrieve.');
-            }
-            const localVarPath = `/api/v1/radios/radios/{id}/tracks/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosUpdate: async (id: number, radio: Radio, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling radiosRadiosUpdate.');
-            }
-            // verify required parameter 'radio' is not null or undefined
-            if (radio === null || radio === undefined) {
-                throw new RequiredError('radio','Required parameter radio was null or undefined when calling radiosRadiosUpdate.');
-            }
-            const localVarPath = `/api/v1/radios/radios/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof radio !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(radio !== undefined ? radio : {}) : (radio || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosValidateCreate: async (radio: Radio, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'radio' is not null or undefined
-            if (radio === null || radio === undefined) {
-                throw new RequiredError('radio','Required parameter radio was null or undefined when calling radiosRadiosValidateCreate.');
-            }
-            const localVarPath = `/api/v1/radios/radios/validate/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof radio !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(radio !== undefined ? radio : {}) : (radio || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {RadioSession} radioSession 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosSessionsCreate: async (radioSession: RadioSession, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'radioSession' is not null or undefined
-            if (radioSession === null || radioSession === undefined) {
-                throw new RequiredError('radioSession','Required parameter radioSession was null or undefined when calling radiosSessionsCreate.');
-            }
-            const localVarPath = `/api/v1/radios/sessions/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof radioSession !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(radioSession !== undefined ? radioSession : {}) : (radioSession || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio session.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosSessionsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling radiosSessionsRetrieve.');
-            }
-            const localVarPath = `/api/v1/radios/sessions/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {RadioSessionTrackSerializerCreate} radioSessionTrackSerializerCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosTracksCreate: async (radioSessionTrackSerializerCreate: RadioSessionTrackSerializerCreate, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'radioSessionTrackSerializerCreate' is not null or undefined
-            if (radioSessionTrackSerializerCreate === null || radioSessionTrackSerializerCreate === undefined) {
-                throw new RequiredError('radioSessionTrackSerializerCreate','Required parameter radioSessionTrackSerializerCreate was null or undefined when calling radiosTracksCreate.');
-            }
-            const localVarPath = `/api/v1/radios/tracks/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof radioSessionTrackSerializerCreate !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(radioSessionTrackSerializerCreate !== undefined ? radioSessionTrackSerializerCreate : {}) : (radioSessionTrackSerializerCreate || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * RadiosApi - functional programming interface
- * @export
- */
-export const RadiosApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosCreate(radio: Radio, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Radio>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosCreate(radio, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosFiltersRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Radio>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosFiltersRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [nameIexact] 
-         * @param {string} [nameStartswith] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosList(name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedRadioList>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosList(name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, q, scope, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {PatchedRadio} [patchedRadio] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosPartialUpdate(id: number, patchedRadio?: PatchedRadio, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Radio>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosPartialUpdate(id, patchedRadio, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Radio>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosTracksRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Radio>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosTracksRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosUpdate(id: number, radio: Radio, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Radio>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosUpdate(id, radio, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosRadiosValidateCreate(radio: Radio, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Radio>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosRadiosValidateCreate(radio, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {RadioSession} radioSession 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosSessionsCreate(radioSession: RadioSession, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RadioSession>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosSessionsCreate(radioSession, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio session.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosSessionsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RadioSession>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosSessionsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {RadioSessionTrackSerializerCreate} radioSessionTrackSerializerCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async radiosTracksCreate(radioSessionTrackSerializerCreate: RadioSessionTrackSerializerCreate, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RadioSessionTrackSerializerCreate>> {
-            const localVarAxiosArgs = await RadiosApiAxiosParamCreator(configuration).radiosTracksCreate(radioSessionTrackSerializerCreate, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * RadiosApi - factory interface
- * @export
- */
-export const RadiosApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosCreate(radio: Radio, options?: any): AxiosPromise<Radio> {
-            return RadiosApiFp(configuration).radiosRadiosCreate(radio, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosDestroy(id: number, options?: any): AxiosPromise<void> {
-            return RadiosApiFp(configuration).radiosRadiosDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosFiltersRetrieve(options?: any): AxiosPromise<Radio> {
-            return RadiosApiFp(configuration).radiosRadiosFiltersRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [name] 
-         * @param {string} [nameIcontains] 
-         * @param {string} [nameIexact] 
-         * @param {string} [nameStartswith] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosList(name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options?: any): AxiosPromise<PaginatedRadioList> {
-            return RadiosApiFp(configuration).radiosRadiosList(name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, q, scope, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {PatchedRadio} [patchedRadio] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosPartialUpdate(id: number, patchedRadio?: PatchedRadio, options?: any): AxiosPromise<Radio> {
-            return RadiosApiFp(configuration).radiosRadiosPartialUpdate(id, patchedRadio, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosRetrieve(id: number, options?: any): AxiosPromise<Radio> {
-            return RadiosApiFp(configuration).radiosRadiosRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosTracksRetrieve(id: number, options?: any): AxiosPromise<Radio> {
-            return RadiosApiFp(configuration).radiosRadiosTracksRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio.
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosUpdate(id: number, radio: Radio, options?: any): AxiosPromise<Radio> {
-            return RadiosApiFp(configuration).radiosRadiosUpdate(id, radio, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {Radio} radio 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosRadiosValidateCreate(radio: Radio, options?: any): AxiosPromise<Radio> {
-            return RadiosApiFp(configuration).radiosRadiosValidateCreate(radio, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {RadioSession} radioSession 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosSessionsCreate(radioSession: RadioSession, options?: any): AxiosPromise<RadioSession> {
-            return RadiosApiFp(configuration).radiosSessionsCreate(radioSession, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {number} id A unique integer value identifying this radio session.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosSessionsRetrieve(id: number, options?: any): AxiosPromise<RadioSession> {
-            return RadiosApiFp(configuration).radiosSessionsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {RadioSessionTrackSerializerCreate} radioSessionTrackSerializerCreate 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        radiosTracksCreate(radioSessionTrackSerializerCreate: RadioSessionTrackSerializerCreate, options?: any): AxiosPromise<RadioSessionTrackSerializerCreate> {
-            return RadiosApiFp(configuration).radiosTracksCreate(radioSessionTrackSerializerCreate, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * RadiosApi - object-oriented interface
- * @export
- * @class RadiosApi
- * @extends {BaseAPI}
- */
-export class RadiosApi extends BaseAPI {
-    /**
-     * 
-     * @param {Radio} radio 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosCreate(radio: Radio, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosCreate(radio, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this radio.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosDestroy(id: number, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosFiltersRetrieve(options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosFiltersRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [name] 
-     * @param {string} [nameIcontains] 
-     * @param {string} [nameIexact] 
-     * @param {string} [nameStartswith] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {string} [scope] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosList(name?: string, nameIcontains?: string, nameIexact?: string, nameStartswith?: string, ordering?: string, page?: number, pageSize?: number, q?: string, scope?: string, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosList(name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, q, scope, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this radio.
-     * @param {PatchedRadio} [patchedRadio] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosPartialUpdate(id: number, patchedRadio?: PatchedRadio, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosPartialUpdate(id, patchedRadio, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this radio.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosRetrieve(id: number, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this radio.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosTracksRetrieve(id: number, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosTracksRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this radio.
-     * @param {Radio} radio 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosUpdate(id: number, radio: Radio, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosUpdate(id, radio, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {Radio} radio 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosRadiosValidateCreate(radio: Radio, options?: any) {
-        return RadiosApiFp(this.configuration).radiosRadiosValidateCreate(radio, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {RadioSession} radioSession 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosSessionsCreate(radioSession: RadioSession, options?: any) {
-        return RadiosApiFp(this.configuration).radiosSessionsCreate(radioSession, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {number} id A unique integer value identifying this radio session.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosSessionsRetrieve(id: number, options?: any) {
-        return RadiosApiFp(this.configuration).radiosSessionsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {RadioSessionTrackSerializerCreate} radioSessionTrackSerializerCreate 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RadiosApi
-     */
-    public radiosTracksCreate(radioSessionTrackSerializerCreate: RadioSessionTrackSerializerCreate, options?: any) {
-        return RadiosApiFp(this.configuration).radiosTracksCreate(radioSessionTrackSerializerCreate, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/rate-limit-api.ts b/api/rate-limit-api.ts
deleted file mode 100644
index d436178d3af36c536ca11b510b444a733b86f13f..0000000000000000000000000000000000000000
--- a/api/rate-limit-api.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { RateLimit } from '../types';
-/**
- * RateLimitApi - axios parameter creator
- * @export
- */
-export const RateLimitApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        rateLimitRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/rate-limit/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * RateLimitApi - functional programming interface
- * @export
- */
-export const RateLimitApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async rateLimitRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<RateLimit>> {
-            const localVarAxiosArgs = await RateLimitApiAxiosParamCreator(configuration).rateLimitRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * RateLimitApi - factory interface
- * @export
- */
-export const RateLimitApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        rateLimitRetrieve(options?: any): AxiosPromise<RateLimit> {
-            return RateLimitApiFp(configuration).rateLimitRetrieve(options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * RateLimitApi - object-oriented interface
- * @export
- * @class RateLimitApi
- * @extends {BaseAPI}
- */
-export class RateLimitApi extends BaseAPI {
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof RateLimitApi
-     */
-    public rateLimitRetrieve(options?: any) {
-        return RateLimitApiFp(this.configuration).rateLimitRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/search-api.ts b/api/search-api.ts
deleted file mode 100644
index 5851805fb04816ec3bdf99271523d5e22f752cba..0000000000000000000000000000000000000000
--- a/api/search-api.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-/**
- * SearchApi - axios parameter creator
- * @export
- */
-export const SearchApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        searchRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/search`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * SearchApi - functional programming interface
- * @export
- */
-export const SearchApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async searchRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await SearchApiAxiosParamCreator(configuration).searchRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * SearchApi - factory interface
- * @export
- */
-export const SearchApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        searchRetrieve(options?: any): AxiosPromise<void> {
-            return SearchApiFp(configuration).searchRetrieve(options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * SearchApi - object-oriented interface
- * @export
- * @class SearchApi
- * @extends {BaseAPI}
- */
-export class SearchApi extends BaseAPI {
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SearchApi
-     */
-    public searchRetrieve(options?: any) {
-        return SearchApiFp(this.configuration).searchRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/stream-api.ts b/api/stream-api.ts
deleted file mode 100644
index 86eae3d2428406c2d1a3061c8527c8bad9052b32..0000000000000000000000000000000000000000
--- a/api/stream-api.ts
+++ /dev/null
@@ -1,143 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { Track } from '../types';
-/**
- * StreamApi - axios parameter creator
- * @export
- */
-export const StreamApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        streamRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling streamRetrieve.');
-            }
-            const localVarPath = `/api/v1/stream/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * StreamApi - functional programming interface
- * @export
- */
-export const StreamApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async streamRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await StreamApiAxiosParamCreator(configuration).streamRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * StreamApi - factory interface
- * @export
- */
-export const StreamApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        streamRetrieve(uuid: string, options?: any): AxiosPromise<Track> {
-            return StreamApiFp(configuration).streamRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * StreamApi - object-oriented interface
- * @export
- * @class StreamApi
- * @extends {BaseAPI}
- */
-export class StreamApi extends BaseAPI {
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof StreamApi
-     */
-    public streamRetrieve(uuid: string, options?: any) {
-        return StreamApiFp(this.configuration).streamRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/subscriptions-api.ts b/api/subscriptions-api.ts
deleted file mode 100644
index b8d10621d5c4f86de17eaafe7d6f63351263cb42..0000000000000000000000000000000000000000
--- a/api/subscriptions-api.ts
+++ /dev/null
@@ -1,323 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedSubscriptionList } from '../types';
-// @ts-ignore
-import { Subscription } from '../types';
-/**
- * SubscriptionsApi - axios parameter creator
- * @export
- */
-export const SubscriptionsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        subscriptionsAllRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/subscriptions/all/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        subscriptionsList: async (ordering?: string, page?: number, pageSize?: number, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/subscriptions/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        subscriptionsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling subscriptionsRetrieve.');
-            }
-            const localVarPath = `/api/v1/subscriptions/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * SubscriptionsApi - functional programming interface
- * @export
- */
-export const SubscriptionsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async subscriptionsAllRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Subscription>> {
-            const localVarAxiosArgs = await SubscriptionsApiAxiosParamCreator(configuration).subscriptionsAllRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async subscriptionsList(ordering?: string, page?: number, pageSize?: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedSubscriptionList>> {
-            const localVarAxiosArgs = await SubscriptionsApiAxiosParamCreator(configuration).subscriptionsList(ordering, page, pageSize, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async subscriptionsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Subscription>> {
-            const localVarAxiosArgs = await SubscriptionsApiAxiosParamCreator(configuration).subscriptionsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * SubscriptionsApi - factory interface
- * @export
- */
-export const SubscriptionsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        subscriptionsAllRetrieve(options?: any): AxiosPromise<Subscription> {
-            return SubscriptionsApiFp(configuration).subscriptionsAllRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        subscriptionsList(ordering?: string, page?: number, pageSize?: number, options?: any): AxiosPromise<PaginatedSubscriptionList> {
-            return SubscriptionsApiFp(configuration).subscriptionsList(ordering, page, pageSize, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        subscriptionsRetrieve(uuid: string, options?: any): AxiosPromise<Subscription> {
-            return SubscriptionsApiFp(configuration).subscriptionsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * SubscriptionsApi - object-oriented interface
- * @export
- * @class SubscriptionsApi
- * @extends {BaseAPI}
- */
-export class SubscriptionsApi extends BaseAPI {
-    /**
-     * Return all the subscriptions of the current user, with only limited data to have a performant endpoint and avoid lots of queries just to display subscription status in the UI
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SubscriptionsApi
-     */
-    public subscriptionsAllRetrieve(options?: any) {
-        return SubscriptionsApiFp(this.configuration).subscriptionsAllRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SubscriptionsApi
-     */
-    public subscriptionsList(ordering?: string, page?: number, pageSize?: number, options?: any) {
-        return SubscriptionsApiFp(this.configuration).subscriptionsList(ordering, page, pageSize, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof SubscriptionsApi
-     */
-    public subscriptionsRetrieve(uuid: string, options?: any) {
-        return SubscriptionsApiFp(this.configuration).subscriptionsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/tags-api.ts b/api/tags-api.ts
deleted file mode 100644
index 0f8e50aa9aa0a2162140bbeba9f98fea0c1ef66d..0000000000000000000000000000000000000000
--- a/api/tags-api.ts
+++ /dev/null
@@ -1,270 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedTagList } from '../types';
-// @ts-ignore
-import { Tag } from '../types';
-/**
- * TagsApi - axios parameter creator
- * @export
- */
-export const TagsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} [name] 
-         * @param {string} [nameStartswith] 
-         * @param {Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tagsList: async (name?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>, page?: number, pageSize?: number, q?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/tags/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (name !== undefined) {
-                localVarQueryParameter['name'] = name;
-            }
-
-            if (nameStartswith !== undefined) {
-                localVarQueryParameter['name__startswith'] = nameStartswith;
-            }
-
-            if (ordering) {
-                localVarQueryParameter['ordering'] = ordering.join(COLLECTION_FORMATS.csv);
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tagsRetrieve: async (name: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'name' is not null or undefined
-            if (name === null || name === undefined) {
-                throw new RequiredError('name','Required parameter name was null or undefined when calling tagsRetrieve.');
-            }
-            const localVarPath = `/api/v1/tags/{name}/`
-                .replace(`{${"name"}}`, encodeURIComponent(String(name)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * TagsApi - functional programming interface
- * @export
- */
-export const TagsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {string} [name] 
-         * @param {string} [nameStartswith] 
-         * @param {Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tagsList(name?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>, page?: number, pageSize?: number, q?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedTagList>> {
-            const localVarAxiosArgs = await TagsApiAxiosParamCreator(configuration).tagsList(name, nameStartswith, ordering, page, pageSize, q, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tagsRetrieve(name: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Tag>> {
-            const localVarAxiosArgs = await TagsApiAxiosParamCreator(configuration).tagsRetrieve(name, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * TagsApi - factory interface
- * @export
- */
-export const TagsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {string} [name] 
-         * @param {string} [nameStartswith] 
-         * @param {Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {string} [q] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tagsList(name?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>, page?: number, pageSize?: number, q?: string, options?: any): AxiosPromise<PaginatedTagList> {
-            return TagsApiFp(configuration).tagsList(name, nameStartswith, ordering, page, pageSize, q, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} name 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tagsRetrieve(name: string, options?: any): AxiosPromise<Tag> {
-            return TagsApiFp(configuration).tagsRetrieve(name, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * TagsApi - object-oriented interface
- * @export
- * @class TagsApi
- * @extends {BaseAPI}
- */
-export class TagsApi extends BaseAPI {
-    /**
-     * 
-     * @param {string} [name] 
-     * @param {string} [nameStartswith] 
-     * @param {Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>} [ordering] Ordering
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {string} [q] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TagsApi
-     */
-    public tagsList(name?: string, nameStartswith?: string, ordering?: Array<'-creation_date' | '-length' | '-name' | 'creation_date' | 'length' | 'name'>, page?: number, pageSize?: number, q?: string, options?: any) {
-        return TagsApiFp(this.configuration).tagsList(name, nameStartswith, ordering, page, pageSize, q, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} name 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TagsApi
-     */
-    public tagsRetrieve(name: string, options?: any) {
-        return TagsApiFp(this.configuration).tagsRetrieve(name, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/text-preview-api.ts b/api/text-preview-api.ts
deleted file mode 100644
index b2efc6df0433f9e8b370e0c866a5fd7a0fdcce48..0000000000000000000000000000000000000000
--- a/api/text-preview-api.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-/**
- * TextPreviewApi - axios parameter creator
- * @export
- */
-export const TextPreviewApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        textPreviewCreate: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/text-preview/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * TextPreviewApi - functional programming interface
- * @export
- */
-export const TextPreviewApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async textPreviewCreate(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await TextPreviewApiAxiosParamCreator(configuration).textPreviewCreate(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * TextPreviewApi - factory interface
- * @export
- */
-export const TextPreviewApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        textPreviewCreate(options?: any): AxiosPromise<void> {
-            return TextPreviewApiFp(configuration).textPreviewCreate(options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * TextPreviewApi - object-oriented interface
- * @export
- * @class TextPreviewApi
- * @extends {BaseAPI}
- */
-export class TextPreviewApi extends BaseAPI {
-    /**
-     * 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TextPreviewApi
-     */
-    public textPreviewCreate(options?: any) {
-        return TextPreviewApiFp(this.configuration).textPreviewCreate(options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/tracks-api.ts b/api/tracks-api.ts
deleted file mode 100644
index e1e3b90ac96ad742216090c3c427f5c8e8d77156..0000000000000000000000000000000000000000
--- a/api/tracks-api.ts
+++ /dev/null
@@ -1,930 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedTrackList } from '../types';
-// @ts-ignore
-import { Track } from '../types';
-/**
- * TracksApi - axios parameter creator
- * @export
- */
-export const TracksApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksDestroy: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling tracksDestroy.');
-            }
-            const localVarPath = `/api/v1/tracks/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {Track} track 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksFetchesCreate: async (id: number, track: Track, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling tracksFetchesCreate.');
-            }
-            // verify required parameter 'track' is not null or undefined
-            if (track === null || track === undefined) {
-                throw new RequiredError('track','Required parameter track was null or undefined when calling tracksFetchesCreate.');
-            }
-            const localVarPath = `/api/v1/tracks/{id}/fetches/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof track !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(track !== undefined ? track : {}) : (track || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksFetchesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling tracksFetchesRetrieve.');
-            }
-            const localVarPath = `/api/v1/tracks/{id}/fetches/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksLibrariesRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling tracksLibrariesRetrieve.');
-            }
-            const localVarPath = `/api/v1/tracks/{id}/libraries/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} [album] 
-         * @param {string} [artist] 
-         * @param {string} [channel] 
-         * @param {boolean} [hidden] 
-         * @param {Array<number>} [id] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [license] 
-         * @param {string} [mbid] 
-         * @param {Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {string} [title] 
-         * @param {string} [titleIcontains] 
-         * @param {string} [titleIexact] 
-         * @param {string} [titleStartswith] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksList: async (album?: number, artist?: string, channel?: string, hidden?: boolean, id?: Array<number>, includeChannels?: boolean, library?: string, license?: string, mbid?: string, ordering?: Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, title?: string, titleIcontains?: string, titleIexact?: string, titleStartswith?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/tracks/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (album !== undefined) {
-                localVarQueryParameter['album'] = album;
-            }
-
-            if (artist !== undefined) {
-                localVarQueryParameter['artist'] = artist;
-            }
-
-            if (channel !== undefined) {
-                localVarQueryParameter['channel'] = channel;
-            }
-
-            if (hidden !== undefined) {
-                localVarQueryParameter['hidden'] = hidden;
-            }
-
-            if (id) {
-                localVarQueryParameter['id'] = id;
-            }
-
-            if (includeChannels !== undefined) {
-                localVarQueryParameter['include_channels'] = includeChannels;
-            }
-
-            if (library !== undefined) {
-                localVarQueryParameter['library'] = library;
-            }
-
-            if (license !== undefined) {
-                localVarQueryParameter['license'] = license;
-            }
-
-            if (mbid !== undefined) {
-                localVarQueryParameter['mbid'] = mbid;
-            }
-
-            if (ordering) {
-                localVarQueryParameter['ordering'] = ordering.join(COLLECTION_FORMATS.csv);
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (playable !== undefined) {
-                localVarQueryParameter['playable'] = playable;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (related !== undefined) {
-                localVarQueryParameter['related'] = related;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-            if (tag) {
-                localVarQueryParameter['tag'] = tag;
-            }
-
-            if (title !== undefined) {
-                localVarQueryParameter['title'] = title;
-            }
-
-            if (titleIcontains !== undefined) {
-                localVarQueryParameter['title__icontains'] = titleIcontains;
-            }
-
-            if (titleIexact !== undefined) {
-                localVarQueryParameter['title__iexact'] = titleIexact;
-            }
-
-            if (titleStartswith !== undefined) {
-                localVarQueryParameter['title__startswith'] = titleStartswith;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {Track} track 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksMutationsCreate: async (id: number, track: Track, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling tracksMutationsCreate.');
-            }
-            // verify required parameter 'track' is not null or undefined
-            if (track === null || track === undefined) {
-                throw new RequiredError('track','Required parameter track was null or undefined when calling tracksMutationsCreate.');
-            }
-            const localVarPath = `/api/v1/tracks/{id}/mutations/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof track !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(track !== undefined ? track : {}) : (track || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksMutationsRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling tracksMutationsRetrieve.');
-            }
-            const localVarPath = `/api/v1/tracks/{id}/mutations/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksRetrieve: async (id: number, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'id' is not null or undefined
-            if (id === null || id === undefined) {
-                throw new RequiredError('id','Required parameter id was null or undefined when calling tracksRetrieve.');
-            }
-            const localVarPath = `/api/v1/tracks/{id}/`
-                .replace(`{${"id"}}`, encodeURIComponent(String(id)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * TracksApi - functional programming interface
- * @export
- */
-export const TracksApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksDestroy(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksDestroy(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {Track} track 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksFetchesCreate(id: number, track: Track, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksFetchesCreate(id, track, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksFetchesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksFetchesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksLibrariesRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksLibrariesRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} [album] 
-         * @param {string} [artist] 
-         * @param {string} [channel] 
-         * @param {boolean} [hidden] 
-         * @param {Array<number>} [id] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [license] 
-         * @param {string} [mbid] 
-         * @param {Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {string} [title] 
-         * @param {string} [titleIcontains] 
-         * @param {string} [titleIexact] 
-         * @param {string} [titleStartswith] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksList(album?: number, artist?: string, channel?: string, hidden?: boolean, id?: Array<number>, includeChannels?: boolean, library?: string, license?: string, mbid?: string, ordering?: Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, title?: string, titleIcontains?: string, titleIexact?: string, titleStartswith?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedTrackList>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksList(album, artist, channel, hidden, id, includeChannels, library, license, mbid, ordering, page, pageSize, playable, q, related, scope, tag, title, titleIcontains, titleIexact, titleStartswith, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {Track} track 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksMutationsCreate(id: number, track: Track, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksMutationsCreate(id, track, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksMutationsRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksMutationsRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async tracksRetrieve(id: number, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<Track>> {
-            const localVarAxiosArgs = await TracksApiAxiosParamCreator(configuration).tracksRetrieve(id, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * TracksApi - factory interface
- * @export
- */
-export const TracksApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksDestroy(id: number, options?: any): AxiosPromise<void> {
-            return TracksApiFp(configuration).tracksDestroy(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {Track} track 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksFetchesCreate(id: number, track: Track, options?: any): AxiosPromise<Track> {
-            return TracksApiFp(configuration).tracksFetchesCreate(id, track, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksFetchesRetrieve(id: number, options?: any): AxiosPromise<Track> {
-            return TracksApiFp(configuration).tracksFetchesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksLibrariesRetrieve(id: number, options?: any): AxiosPromise<Track> {
-            return TracksApiFp(configuration).tracksLibrariesRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} [album] 
-         * @param {string} [artist] 
-         * @param {string} [channel] 
-         * @param {boolean} [hidden] 
-         * @param {Array<number>} [id] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [license] 
-         * @param {string} [mbid] 
-         * @param {Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>} [ordering] Ordering
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [related] 
-         * @param {string} [scope] 
-         * @param {Array<string>} [tag] 
-         * @param {string} [title] 
-         * @param {string} [titleIcontains] 
-         * @param {string} [titleIexact] 
-         * @param {string} [titleStartswith] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksList(album?: number, artist?: string, channel?: string, hidden?: boolean, id?: Array<number>, includeChannels?: boolean, library?: string, license?: string, mbid?: string, ordering?: Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, title?: string, titleIcontains?: string, titleIexact?: string, titleStartswith?: string, options?: any): AxiosPromise<PaginatedTrackList> {
-            return TracksApiFp(configuration).tracksList(album, artist, channel, hidden, id, includeChannels, library, license, mbid, ordering, page, pageSize, playable, q, related, scope, tag, title, titleIcontains, titleIexact, titleStartswith, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {Track} track 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksMutationsCreate(id: number, track: Track, options?: any): AxiosPromise<Track> {
-            return TracksApiFp(configuration).tracksMutationsCreate(id, track, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksMutationsRetrieve(id: number, options?: any): AxiosPromise<Track> {
-            return TracksApiFp(configuration).tracksMutationsRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * A simple ViewSet for viewing and editing accounts.
-         * @param {number} id A unique integer value identifying this track.
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        tracksRetrieve(id: number, options?: any): AxiosPromise<Track> {
-            return TracksApiFp(configuration).tracksRetrieve(id, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * TracksApi - object-oriented interface
- * @export
- * @class TracksApi
- * @extends {BaseAPI}
- */
-export class TracksApi extends BaseAPI {
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksDestroy(id: number, options?: any) {
-        return TracksApiFp(this.configuration).tracksDestroy(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} id A unique integer value identifying this track.
-     * @param {Track} track 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksFetchesCreate(id: number, track: Track, options?: any) {
-        return TracksApiFp(this.configuration).tracksFetchesCreate(id, track, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksFetchesRetrieve(id: number, options?: any) {
-        return TracksApiFp(this.configuration).tracksFetchesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksLibrariesRetrieve(id: number, options?: any) {
-        return TracksApiFp(this.configuration).tracksLibrariesRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} [album] 
-     * @param {string} [artist] 
-     * @param {string} [channel] 
-     * @param {boolean} [hidden] 
-     * @param {Array<number>} [id] 
-     * @param {boolean} [includeChannels] 
-     * @param {string} [library] 
-     * @param {string} [license] 
-     * @param {string} [mbid] 
-     * @param {Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>} [ordering] Ordering
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {boolean} [playable] 
-     * @param {string} [q] 
-     * @param {string} [related] 
-     * @param {string} [scope] 
-     * @param {Array<string>} [tag] 
-     * @param {string} [title] 
-     * @param {string} [titleIcontains] 
-     * @param {string} [titleIexact] 
-     * @param {string} [titleStartswith] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksList(album?: number, artist?: string, channel?: string, hidden?: boolean, id?: Array<number>, includeChannels?: boolean, library?: string, license?: string, mbid?: string, ordering?: Array<'-album__release_date' | '-album__title' | '-artist__modification_date' | '-artist__name' | '-creation_date' | '-disc_number' | '-position' | '-random' | '-related' | '-size' | '-title' | 'album__release_date' | 'album__title' | 'artist__modification_date' | 'artist__name' | 'creation_date' | 'disc_number' | 'position' | 'random' | 'related' | 'size' | 'title'>, page?: number, pageSize?: number, playable?: boolean, q?: string, related?: string, scope?: string, tag?: Array<string>, title?: string, titleIcontains?: string, titleIexact?: string, titleStartswith?: string, options?: any) {
-        return TracksApiFp(this.configuration).tracksList(album, artist, channel, hidden, id, includeChannels, library, license, mbid, ordering, page, pageSize, playable, q, related, scope, tag, title, titleIcontains, titleIexact, titleStartswith, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} id A unique integer value identifying this track.
-     * @param {Track} track 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksMutationsCreate(id: number, track: Track, options?: any) {
-        return TracksApiFp(this.configuration).tracksMutationsCreate(id, track, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksMutationsRetrieve(id: number, options?: any) {
-        return TracksApiFp(this.configuration).tracksMutationsRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * A simple ViewSet for viewing and editing accounts.
-     * @param {number} id A unique integer value identifying this track.
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof TracksApi
-     */
-    public tracksRetrieve(id: number, options?: any) {
-        return TracksApiFp(this.configuration).tracksRetrieve(id, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/uploads-api.ts b/api/uploads-api.ts
deleted file mode 100644
index f09e613d4e361f8dfe13b0ff51693e4a7d2dd16a..0000000000000000000000000000000000000000
--- a/api/uploads-api.ts
+++ /dev/null
@@ -1,886 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PaginatedUploadForOwnerList } from '../types';
-// @ts-ignore
-import { PatchedUploadForOwner } from '../types';
-// @ts-ignore
-import { UploadForOwner } from '../types';
-/**
- * UploadsApi - axios parameter creator
- * @export
- */
-export const UploadsApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsActionCreate: async (uploadForOwner: UploadForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uploadForOwner' is not null or undefined
-            if (uploadForOwner === null || uploadForOwner === undefined) {
-                throw new RequiredError('uploadForOwner','Required parameter uploadForOwner was null or undefined when calling uploadsActionCreate.');
-            }
-            const localVarPath = `/api/v1/uploads/action/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof uploadForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(uploadForOwner !== undefined ? uploadForOwner : {}) : (uploadForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsAudioFileMetadataRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling uploadsAudioFileMetadataRetrieve.');
-            }
-            const localVarPath = `/api/v1/uploads/{uuid}/audio-file-metadata/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsCreate: async (uploadForOwner: UploadForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uploadForOwner' is not null or undefined
-            if (uploadForOwner === null || uploadForOwner === undefined) {
-                throw new RequiredError('uploadForOwner','Required parameter uploadForOwner was null or undefined when calling uploadsCreate.');
-            }
-            const localVarPath = `/api/v1/uploads/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof uploadForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(uploadForOwner !== undefined ? uploadForOwner : {}) : (uploadForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsDestroy: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling uploadsDestroy.');
-            }
-            const localVarPath = `/api/v1/uploads/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} [albumArtist] 
-         * @param {string} [channel] 
-         * @param {string} [importReference] 
-         * @param {Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>} [importStatus] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mimetype] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {string} [track] 
-         * @param {string} [trackArtist] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsList: async (albumArtist?: string, channel?: string, importReference?: string, importStatus?: Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>, includeChannels?: boolean, library?: string, mimetype?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: string, trackArtist?: string, options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/uploads/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-            if (albumArtist !== undefined) {
-                localVarQueryParameter['album_artist'] = albumArtist;
-            }
-
-            if (channel !== undefined) {
-                localVarQueryParameter['channel'] = channel;
-            }
-
-            if (importReference !== undefined) {
-                localVarQueryParameter['import_reference'] = importReference;
-            }
-
-            if (importStatus) {
-                localVarQueryParameter['import_status'] = importStatus;
-            }
-
-            if (includeChannels !== undefined) {
-                localVarQueryParameter['include_channels'] = includeChannels;
-            }
-
-            if (library !== undefined) {
-                localVarQueryParameter['library'] = library;
-            }
-
-            if (mimetype !== undefined) {
-                localVarQueryParameter['mimetype'] = mimetype;
-            }
-
-            if (ordering !== undefined) {
-                localVarQueryParameter['ordering'] = ordering;
-            }
-
-            if (page !== undefined) {
-                localVarQueryParameter['page'] = page;
-            }
-
-            if (pageSize !== undefined) {
-                localVarQueryParameter['page_size'] = pageSize;
-            }
-
-            if (playable !== undefined) {
-                localVarQueryParameter['playable'] = playable;
-            }
-
-            if (q !== undefined) {
-                localVarQueryParameter['q'] = q;
-            }
-
-            if (scope !== undefined) {
-                localVarQueryParameter['scope'] = scope;
-            }
-
-            if (track !== undefined) {
-                localVarQueryParameter['track'] = track;
-            }
-
-            if (trackArtist !== undefined) {
-                localVarQueryParameter['track_artist'] = trackArtist;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedUploadForOwner} [patchedUploadForOwner] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsPartialUpdate: async (uuid: string, patchedUploadForOwner?: PatchedUploadForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling uploadsPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/uploads/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedUploadForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedUploadForOwner !== undefined ? patchedUploadForOwner : {}) : (patchedUploadForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsRetrieve: async (uuid: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling uploadsRetrieve.');
-            }
-            const localVarPath = `/api/v1/uploads/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsUpdate: async (uuid: string, uploadForOwner: UploadForOwner, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'uuid' is not null or undefined
-            if (uuid === null || uuid === undefined) {
-                throw new RequiredError('uuid','Required parameter uuid was null or undefined when calling uploadsUpdate.');
-            }
-            // verify required parameter 'uploadForOwner' is not null or undefined
-            if (uploadForOwner === null || uploadForOwner === undefined) {
-                throw new RequiredError('uploadForOwner','Required parameter uploadForOwner was null or undefined when calling uploadsUpdate.');
-            }
-            const localVarPath = `/api/v1/uploads/{uuid}/`
-                .replace(`{${"uuid"}}`, encodeURIComponent(String(uuid)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof uploadForOwner !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(uploadForOwner !== undefined ? uploadForOwner : {}) : (uploadForOwner || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * UploadsApi - functional programming interface
- * @export
- */
-export const UploadsApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsActionCreate(uploadForOwner: UploadForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UploadForOwner>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsActionCreate(uploadForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsAudioFileMetadataRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UploadForOwner>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsAudioFileMetadataRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsCreate(uploadForOwner: UploadForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UploadForOwner>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsCreate(uploadForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsDestroy(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsDestroy(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} [albumArtist] 
-         * @param {string} [channel] 
-         * @param {string} [importReference] 
-         * @param {Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>} [importStatus] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mimetype] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {string} [track] 
-         * @param {string} [trackArtist] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsList(albumArtist?: string, channel?: string, importReference?: string, importStatus?: Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>, includeChannels?: boolean, library?: string, mimetype?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: string, trackArtist?: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<PaginatedUploadForOwnerList>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsList(albumArtist, channel, importReference, importStatus, includeChannels, library, mimetype, ordering, page, pageSize, playable, q, scope, track, trackArtist, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedUploadForOwner} [patchedUploadForOwner] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsPartialUpdate(uuid: string, patchedUploadForOwner?: PatchedUploadForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UploadForOwner>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsPartialUpdate(uuid, patchedUploadForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsRetrieve(uuid: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UploadForOwner>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsRetrieve(uuid, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async uploadsUpdate(uuid: string, uploadForOwner: UploadForOwner, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UploadForOwner>> {
-            const localVarAxiosArgs = await UploadsApiAxiosParamCreator(configuration).uploadsUpdate(uuid, uploadForOwner, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * UploadsApi - factory interface
- * @export
- */
-export const UploadsApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsActionCreate(uploadForOwner: UploadForOwner, options?: any): AxiosPromise<UploadForOwner> {
-            return UploadsApiFp(configuration).uploadsActionCreate(uploadForOwner, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsAudioFileMetadataRetrieve(uuid: string, options?: any): AxiosPromise<UploadForOwner> {
-            return UploadsApiFp(configuration).uploadsAudioFileMetadataRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsCreate(uploadForOwner: UploadForOwner, options?: any): AxiosPromise<UploadForOwner> {
-            return UploadsApiFp(configuration).uploadsCreate(uploadForOwner, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsDestroy(uuid: string, options?: any): AxiosPromise<void> {
-            return UploadsApiFp(configuration).uploadsDestroy(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} [albumArtist] 
-         * @param {string} [channel] 
-         * @param {string} [importReference] 
-         * @param {Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>} [importStatus] 
-         * @param {boolean} [includeChannels] 
-         * @param {string} [library] 
-         * @param {string} [mimetype] 
-         * @param {string} [ordering] Which field to use when ordering the results.
-         * @param {number} [page] A page number within the paginated result set.
-         * @param {number} [pageSize] Number of results to return per page.
-         * @param {boolean} [playable] 
-         * @param {string} [q] 
-         * @param {string} [scope] 
-         * @param {string} [track] 
-         * @param {string} [trackArtist] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsList(albumArtist?: string, channel?: string, importReference?: string, importStatus?: Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>, includeChannels?: boolean, library?: string, mimetype?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: string, trackArtist?: string, options?: any): AxiosPromise<PaginatedUploadForOwnerList> {
-            return UploadsApiFp(configuration).uploadsList(albumArtist, channel, importReference, importStatus, includeChannels, library, mimetype, ordering, page, pageSize, playable, q, scope, track, trackArtist, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {PatchedUploadForOwner} [patchedUploadForOwner] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsPartialUpdate(uuid: string, patchedUploadForOwner?: PatchedUploadForOwner, options?: any): AxiosPromise<UploadForOwner> {
-            return UploadsApiFp(configuration).uploadsPartialUpdate(uuid, patchedUploadForOwner, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsRetrieve(uuid: string, options?: any): AxiosPromise<UploadForOwner> {
-            return UploadsApiFp(configuration).uploadsRetrieve(uuid, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} uuid 
-         * @param {UploadForOwner} uploadForOwner 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        uploadsUpdate(uuid: string, uploadForOwner: UploadForOwner, options?: any): AxiosPromise<UploadForOwner> {
-            return UploadsApiFp(configuration).uploadsUpdate(uuid, uploadForOwner, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * UploadsApi - object-oriented interface
- * @export
- * @class UploadsApi
- * @extends {BaseAPI}
- */
-export class UploadsApi extends BaseAPI {
-    /**
-     * str(object=\'\') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str  Create a new string object from the given object. If encoding or errors is specified, then the object must expose a data buffer that will be decoded using the given encoding and error handler. Otherwise, returns the result of object.__str__() (if defined) or repr(object). encoding defaults to sys.getdefaultencoding(). errors defaults to \'strict\'.
-     * @param {UploadForOwner} uploadForOwner 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsActionCreate(uploadForOwner: UploadForOwner, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsActionCreate(uploadForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsAudioFileMetadataRetrieve(uuid: string, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsAudioFileMetadataRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {UploadForOwner} uploadForOwner 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsCreate(uploadForOwner: UploadForOwner, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsCreate(uploadForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsDestroy(uuid: string, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsDestroy(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} [albumArtist] 
-     * @param {string} [channel] 
-     * @param {string} [importReference] 
-     * @param {Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>} [importStatus] 
-     * @param {boolean} [includeChannels] 
-     * @param {string} [library] 
-     * @param {string} [mimetype] 
-     * @param {string} [ordering] Which field to use when ordering the results.
-     * @param {number} [page] A page number within the paginated result set.
-     * @param {number} [pageSize] Number of results to return per page.
-     * @param {boolean} [playable] 
-     * @param {string} [q] 
-     * @param {string} [scope] 
-     * @param {string} [track] 
-     * @param {string} [trackArtist] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsList(albumArtist?: string, channel?: string, importReference?: string, importStatus?: Array<'draft' | 'errored' | 'finished' | 'pending' | 'skipped'>, includeChannels?: boolean, library?: string, mimetype?: string, ordering?: string, page?: number, pageSize?: number, playable?: boolean, q?: string, scope?: string, track?: string, trackArtist?: string, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsList(albumArtist, channel, importReference, importStatus, includeChannels, library, mimetype, ordering, page, pageSize, playable, q, scope, track, trackArtist, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {PatchedUploadForOwner} [patchedUploadForOwner] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsPartialUpdate(uuid: string, patchedUploadForOwner?: PatchedUploadForOwner, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsPartialUpdate(uuid, patchedUploadForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsRetrieve(uuid: string, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsRetrieve(uuid, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} uuid 
-     * @param {UploadForOwner} uploadForOwner 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UploadsApi
-     */
-    public uploadsUpdate(uuid: string, uploadForOwner: UploadForOwner, options?: any) {
-        return UploadsApiFp(this.configuration).uploadsUpdate(uuid, uploadForOwner, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/api/users-api.ts b/api/users-api.ts
deleted file mode 100644
index 3a62dd83d9da700a977d5f0f2ffa4243776dcf35..0000000000000000000000000000000000000000
--- a/api/users-api.ts
+++ /dev/null
@@ -1,1647 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import * as globalImportUrl from 'url';
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-import { Configuration } from '../configuration';
-// Some imports not used depending on template conditions
-// @ts-ignore
-import { BASE_PATH, COLLECTION_FORMATS, RequestArgs, BaseAPI, RequiredError } from '../base';
-// @ts-ignore
-import { PatchedUserWrite } from '../types';
-// @ts-ignore
-import { UserWrite } from '../types';
-/**
- * UsersApi - axios parameter creator
- * @export
- */
-export const UsersApiAxiosParamCreator = function (configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersChangeEmailCreate: async (userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersChangeEmailCreate.');
-            }
-            const localVarPath = `/api/v1/users/change-email/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersMeDestroy: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/users/me/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersMeRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/users/me/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {PatchedUserWrite} [patchedUserWrite] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersPartialUpdate: async (username: string, patchedUserWrite?: PatchedUserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/users/{username}/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedUserWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedUserWrite !== undefined ? patchedUserWrite : {}) : (patchedUserWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSettingsCreate: async (userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersSettingsCreate.');
-            }
-            const localVarPath = `/api/v1/users/settings/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSubsonicTokenCreate: async (username: string, userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersSubsonicTokenCreate.');
-            }
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersSubsonicTokenCreate.');
-            }
-            const localVarPath = `/api/v1/users/{username}/subsonic-token/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSubsonicTokenDestroy: async (username: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersSubsonicTokenDestroy.');
-            }
-            const localVarPath = `/api/v1/users/{username}/subsonic-token/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSubsonicTokenRetrieve: async (username: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersSubsonicTokenRetrieve.');
-            }
-            const localVarPath = `/api/v1/users/{username}/subsonic-token/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUpdate: async (username: string, userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersUpdate.');
-            }
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersUpdate.');
-            }
-            const localVarPath = `/api/v1/users/{username}/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersChangeEmailCreate: async (userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersUsersChangeEmailCreate.');
-            }
-            const localVarPath = `/api/v1/users/users/change-email/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersMeDestroy: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/users/users/me/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersMeRetrieve: async (options: any = {}): Promise<RequestArgs> => {
-            const localVarPath = `/api/v1/users/users/me/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {PatchedUserWrite} [patchedUserWrite] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersPartialUpdate: async (username: string, patchedUserWrite?: PatchedUserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersUsersPartialUpdate.');
-            }
-            const localVarPath = `/api/v1/users/users/{username}/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PATCH', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof patchedUserWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(patchedUserWrite !== undefined ? patchedUserWrite : {}) : (patchedUserWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSettingsCreate: async (userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersUsersSettingsCreate.');
-            }
-            const localVarPath = `/api/v1/users/users/settings/`;
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSubsonicTokenCreate: async (username: string, userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersUsersSubsonicTokenCreate.');
-            }
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersUsersSubsonicTokenCreate.');
-            }
-            const localVarPath = `/api/v1/users/users/{username}/subsonic-token/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'POST', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSubsonicTokenDestroy: async (username: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersUsersSubsonicTokenDestroy.');
-            }
-            const localVarPath = `/api/v1/users/users/{username}/subsonic-token/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'DELETE', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSubsonicTokenRetrieve: async (username: string, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersUsersSubsonicTokenRetrieve.');
-            }
-            const localVarPath = `/api/v1/users/users/{username}/subsonic-token/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'GET', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersUpdate: async (username: string, userWrite: UserWrite, options: any = {}): Promise<RequestArgs> => {
-            // verify required parameter 'username' is not null or undefined
-            if (username === null || username === undefined) {
-                throw new RequiredError('username','Required parameter username was null or undefined when calling usersUsersUpdate.');
-            }
-            // verify required parameter 'userWrite' is not null or undefined
-            if (userWrite === null || userWrite === undefined) {
-                throw new RequiredError('userWrite','Required parameter userWrite was null or undefined when calling usersUsersUpdate.');
-            }
-            const localVarPath = `/api/v1/users/users/{username}/`
-                .replace(`{${"username"}}`, encodeURIComponent(String(username)));
-            const localVarUrlObj = globalImportUrl.parse(localVarPath, true);
-            let baseOptions;
-            if (configuration) {
-                baseOptions = configuration.baseOptions;
-            }
-            const localVarRequestOptions = { method: 'PUT', ...baseOptions, ...options};
-            const localVarHeaderParameter = {} as any;
-            const localVarQueryParameter = {} as any;
-
-            // authentication ApplicationToken required
-            // http bearer authentication required
-            if (configuration && configuration.accessToken) {
-                const accessToken = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken()
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + accessToken;
-            }
-
-            // authentication oauth2 required
-            // oauth required
-            if (configuration && configuration.accessToken) {
-                const localVarAccessTokenValue = typeof configuration.accessToken === 'function'
-                    ? configuration.accessToken("oauth2", [])
-                    : configuration.accessToken;
-                localVarHeaderParameter["Authorization"] = "Bearer " + localVarAccessTokenValue;
-            }
-
-
-    
-            localVarHeaderParameter['Content-Type'] = 'application/json';
-
-            localVarUrlObj.query = {...localVarUrlObj.query, ...localVarQueryParameter, ...options.query};
-            // fix override query string Detail: https://stackoverflow.com/a/7517673/1077943
-            delete localVarUrlObj.search;
-            let headersFromBaseOptions = baseOptions && baseOptions.headers ? baseOptions.headers : {};
-            localVarRequestOptions.headers = {...localVarHeaderParameter, ...headersFromBaseOptions, ...options.headers};
-            const needsSerialization = (typeof userWrite !== "string") || localVarRequestOptions.headers['Content-Type'] === 'application/json';
-            localVarRequestOptions.data =  needsSerialization ? JSON.stringify(userWrite !== undefined ? userWrite : {}) : (userWrite || "");
-
-            return {
-                url: globalImportUrl.format(localVarUrlObj),
-                options: localVarRequestOptions,
-            };
-        },
-    }
-};
-
-/**
- * UsersApi - functional programming interface
- * @export
- */
-export const UsersApiFp = function(configuration?: Configuration) {
-    return {
-        /**
-         * 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersChangeEmailCreate(userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersChangeEmailCreate(userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersMeDestroy(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersMeDestroy(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersMeRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersMeRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {PatchedUserWrite} [patchedUserWrite] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersPartialUpdate(username, patchedUserWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersSettingsCreate(userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersSettingsCreate(userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersSubsonicTokenCreate(username: string, userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersSubsonicTokenCreate(username, userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersSubsonicTokenDestroy(username: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersSubsonicTokenDestroy(username, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersSubsonicTokenRetrieve(username: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersSubsonicTokenRetrieve(username, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUpdate(username: string, userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUpdate(username, userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersChangeEmailCreate(userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersChangeEmailCreate(userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersMeDestroy(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersMeDestroy(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersMeRetrieve(options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersMeRetrieve(options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {PatchedUserWrite} [patchedUserWrite] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersPartialUpdate(username, patchedUserWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersSettingsCreate(userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersSettingsCreate(userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersSubsonicTokenCreate(username: string, userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersSubsonicTokenCreate(username, userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersSubsonicTokenDestroy(username: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<void>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersSubsonicTokenDestroy(username, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersSubsonicTokenRetrieve(username: string, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersSubsonicTokenRetrieve(username, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        async usersUsersUpdate(username: string, userWrite: UserWrite, options?: any): Promise<(axios?: AxiosInstance, basePath?: string) => AxiosPromise<UserWrite>> {
-            const localVarAxiosArgs = await UsersApiAxiosParamCreator(configuration).usersUsersUpdate(username, userWrite, options);
-            return (axios: AxiosInstance = globalAxios, basePath: string = BASE_PATH) => {
-                const axiosRequestArgs = {...localVarAxiosArgs.options, url: basePath + localVarAxiosArgs.url};
-                return axios.request(axiosRequestArgs);
-            };
-        },
-    }
-};
-
-/**
- * UsersApi - factory interface
- * @export
- */
-export const UsersApiFactory = function (configuration?: Configuration, basePath?: string, axios?: AxiosInstance) {
-    return {
-        /**
-         * 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersChangeEmailCreate(userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersChangeEmailCreate(userWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersMeDestroy(options?: any): AxiosPromise<void> {
-            return UsersApiFp(configuration).usersMeDestroy(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersMeRetrieve(options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersMeRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {PatchedUserWrite} [patchedUserWrite] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersPartialUpdate(username, patchedUserWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSettingsCreate(userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersSettingsCreate(userWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSubsonicTokenCreate(username: string, userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersSubsonicTokenCreate(username, userWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSubsonicTokenDestroy(username: string, options?: any): AxiosPromise<void> {
-            return UsersApiFp(configuration).usersSubsonicTokenDestroy(username, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersSubsonicTokenRetrieve(username: string, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersSubsonicTokenRetrieve(username, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUpdate(username: string, userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUpdate(username, userWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersChangeEmailCreate(userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUsersChangeEmailCreate(userWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersMeDestroy(options?: any): AxiosPromise<void> {
-            return UsersApiFp(configuration).usersUsersMeDestroy(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersMeRetrieve(options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUsersMeRetrieve(options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {PatchedUserWrite} [patchedUserWrite] 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUsersPartialUpdate(username, patchedUserWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * Return information about the current user or delete it
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSettingsCreate(userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUsersSettingsCreate(userWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSubsonicTokenCreate(username: string, userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUsersSubsonicTokenCreate(username, userWrite, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSubsonicTokenDestroy(username: string, options?: any): AxiosPromise<void> {
-            return UsersApiFp(configuration).usersUsersSubsonicTokenDestroy(username, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersSubsonicTokenRetrieve(username: string, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUsersSubsonicTokenRetrieve(username, options).then((request) => request(axios, basePath));
-        },
-        /**
-         * 
-         * @param {string} username 
-         * @param {UserWrite} userWrite 
-         * @param {*} [options] Override http request option.
-         * @throws {RequiredError}
-         */
-        usersUsersUpdate(username: string, userWrite: UserWrite, options?: any): AxiosPromise<UserWrite> {
-            return UsersApiFp(configuration).usersUsersUpdate(username, userWrite, options).then((request) => request(axios, basePath));
-        },
-    };
-};
-
-/**
- * UsersApi - object-oriented interface
- * @export
- * @class UsersApi
- * @extends {BaseAPI}
- */
-export class UsersApi extends BaseAPI {
-    /**
-     * 
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersChangeEmailCreate(userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersChangeEmailCreate(userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Return information about the current user or delete it
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersMeDestroy(options?: any) {
-        return UsersApiFp(this.configuration).usersMeDestroy(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Return information about the current user or delete it
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersMeRetrieve(options?: any) {
-        return UsersApiFp(this.configuration).usersMeRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {PatchedUserWrite} [patchedUserWrite] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersPartialUpdate(username, patchedUserWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Return information about the current user or delete it
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersSettingsCreate(userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersSettingsCreate(userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersSubsonicTokenCreate(username: string, userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersSubsonicTokenCreate(username, userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersSubsonicTokenDestroy(username: string, options?: any) {
-        return UsersApiFp(this.configuration).usersSubsonicTokenDestroy(username, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersSubsonicTokenRetrieve(username: string, options?: any) {
-        return UsersApiFp(this.configuration).usersSubsonicTokenRetrieve(username, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUpdate(username: string, userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersUpdate(username, userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersChangeEmailCreate(userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersUsersChangeEmailCreate(userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Return information about the current user or delete it
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersMeDestroy(options?: any) {
-        return UsersApiFp(this.configuration).usersUsersMeDestroy(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Return information about the current user or delete it
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersMeRetrieve(options?: any) {
-        return UsersApiFp(this.configuration).usersUsersMeRetrieve(options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {PatchedUserWrite} [patchedUserWrite] 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersUsersPartialUpdate(username, patchedUserWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * Return information about the current user or delete it
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersSettingsCreate(userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersUsersSettingsCreate(userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersSubsonicTokenCreate(username: string, userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersUsersSubsonicTokenCreate(username, userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersSubsonicTokenDestroy(username: string, options?: any) {
-        return UsersApiFp(this.configuration).usersUsersSubsonicTokenDestroy(username, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersSubsonicTokenRetrieve(username: string, options?: any) {
-        return UsersApiFp(this.configuration).usersUsersSubsonicTokenRetrieve(username, options).then((request) => request(this.axios, this.basePath));
-    }
-
-    /**
-     * 
-     * @param {string} username 
-     * @param {UserWrite} userWrite 
-     * @param {*} [options] Override http request option.
-     * @throws {RequiredError}
-     * @memberof UsersApi
-     */
-    public usersUsersUpdate(username: string, userWrite: UserWrite, options?: any) {
-        return UsersApiFp(this.configuration).usersUsersUpdate(username, userWrite, options).then((request) => request(this.axios, this.basePath));
-    }
-
-}
diff --git a/base.ts b/base.ts
deleted file mode 100644
index 91abbc63270a9a258457d6d699b506e9691ba0f8..0000000000000000000000000000000000000000
--- a/base.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Configuration } from "./configuration";
-// Some imports not used depending on template conditions
-// @ts-ignore
-import globalAxios, { AxiosPromise, AxiosInstance } from 'axios';
-
-export const BASE_PATH = "https://demo.funkwhale.audio".replace(/\/+$/, "");
-
-/**
- *
- * @export
- */
-export const COLLECTION_FORMATS = {
-    csv: ",",
-    ssv: " ",
-    tsv: "\t",
-    pipes: "|",
-};
-
-/**
- *
- * @export
- * @interface RequestArgs
- */
-export interface RequestArgs {
-    url: string;
-    options: any;
-}
-
-/**
- *
- * @export
- * @class BaseAPI
- */
-export class BaseAPI {
-    protected configuration: Configuration | undefined;
-
-    constructor(configuration?: Configuration, protected basePath: string = BASE_PATH, protected axios: AxiosInstance = globalAxios) {
-        if (configuration) {
-            this.configuration = configuration;
-            this.basePath = configuration.basePath || this.basePath;
-        }
-    }
-};
-
-/**
- *
- * @export
- * @class RequiredError
- * @extends {Error}
- */
-export class RequiredError extends Error {
-    name: "RequiredError" = "RequiredError";
-    constructor(public field: string, msg?: string) {
-        super(msg);
-    }
-}
diff --git a/config.yaml b/config.yaml
deleted file mode 100644
index 9618f98c689ae383f8040f61e7a04fe56f33bce2..0000000000000000000000000000000000000000
--- a/config.yaml
+++ /dev/null
@@ -1,7 +0,0 @@
-npmName: "@funkwhale/api"
-withSeparateModelsAndApi: true
-apiPackage: api
-modelPackage: types
-
-typeMappings:
-  AnyType: any
diff --git a/configuration.ts b/configuration.ts
deleted file mode 100644
index f6d993976a2108758907f410b9f4cf474bed4d62..0000000000000000000000000000000000000000
--- a/configuration.ts
+++ /dev/null
@@ -1,75 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-export interface ConfigurationParameters {
-    apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
-    username?: string;
-    password?: string;
-    accessToken?: string | ((name?: string, scopes?: string[]) => string);
-    basePath?: string;
-    baseOptions?: any;
-}
-
-export class Configuration {
-    /**
-     * parameter for apiKey security
-     * @param name security name
-     * @memberof Configuration
-     */
-    apiKey?: string | Promise<string> | ((name: string) => string) | ((name: string) => Promise<string>);
-    /**
-     * parameter for basic security
-     * 
-     * @type {string}
-     * @memberof Configuration
-     */
-    username?: string;
-    /**
-     * parameter for basic security
-     * 
-     * @type {string}
-     * @memberof Configuration
-     */
-    password?: string;
-    /**
-     * parameter for oauth2 security
-     * @param name security name
-     * @param scopes oauth2 scope
-     * @memberof Configuration
-     */
-    accessToken?: string | ((name?: string, scopes?: string[]) => string);
-    /**
-     * override base path
-     * 
-     * @type {string}
-     * @memberof Configuration
-     */
-    basePath?: string;
-    /**
-     * base options for axios calls
-     *
-     * @type {any}
-     * @memberof Configuration
-     */
-    baseOptions?: any;
-
-    constructor(param: ConfigurationParameters = {}) {
-        this.apiKey = param.apiKey;
-        this.username = param.username;
-        this.password = param.password;
-        this.accessToken = param.accessToken;
-        this.basePath = param.basePath;
-        this.baseOptions = param.baseOptions;
-    }
-}
diff --git a/generate.sh b/generate.sh
deleted file mode 100755
index ede4aa0d8ae92a711f12374edc38f17fd48d808a..0000000000000000000000000000000000000000
--- a/generate.sh
+++ /dev/null
@@ -1,9 +0,0 @@
-#!/bin/bash
-
-[[ `jq -r '.name' package.json` != '@funkwhale/api' ]] && exit 1
-
-rm -rf api types
-npx @openapitools/openapi-generator-cli version-manager set 4.3.1
-wget https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/develop/raw/docs/schema.yml?job=build_docs -O schema.yml
-sed -i 's/type: uri$/type: string/;s/type: str$/type: string/' schema.yml
-npx @openapitools/openapi-generator-cli generate -i schema.yml -g typescript-axios -c config.yaml --type-mappings uri=string,str=string | grep -v "Multiple schemas found in the OAS 'content' section, returning only the first one (application/json)"
diff --git a/index.html b/index.html
new file mode 100644
index 0000000000000000000000000000000000000000..f86e483c942e8d64ce4b65d9fdd4f22eb53c46aa
--- /dev/null
+++ b/index.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Vite + TS</title>
+  </head>
+  <body>
+    <div id="app"></div>
+    <script type="module" src="/src/main.ts"></script>
+  </body>
+</html>
diff --git a/index.ts b/index.ts
deleted file mode 100644
index a4f60e4118b4a493f484faff500006f492be39d8..0000000000000000000000000000000000000000
--- a/index.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-export * from "./api";
-export * from "./configuration";
diff --git a/openapitools.json b/openapitools.json
deleted file mode 100644
index 0c86cdc25d2ea0a29b158069f11af5824a7788d4..0000000000000000000000000000000000000000
--- a/openapitools.json
+++ /dev/null
@@ -1,7 +0,0 @@
-{
-  "$schema": "./node_modules/@openapitools/openapi-generator-cli/config.schema.json",
-  "spaces": 2,
-  "generator-cli": {
-    "version": "4.3.1"
-  }
-}
diff --git a/package.json b/package.json
index a066d198f81f08b2b812d623efb8d59c2c3f1535..28edc09915bee7f4a1760770c1aa3735c7c023ac 100644
--- a/package.json
+++ b/package.json
@@ -1,27 +1,22 @@
 {
   "name": "@funkwhale/api",
-  "version": "1.2.8",
-  "description": "OpenAPI client for @funkwhale/api",
-  "author": "OpenAPI-Generator Contributors",
-  "keywords": [
-    "axios",
-    "typescript",
-    "openapi-client",
-    "openapi-generator",
-    "@funkwhale/api"
-  ],
-  "license": "Unlicense",
-  "main": "./dist/index.js",
-  "typings": "./dist/index.d.ts",
+  "private": true,
+  "version": "0.0.0",
+  "type": "module",
   "scripts": {
-    "build": "tsc --outDir dist/",
-    "prepublishOnly": "npm run build"
-  },
-  "dependencies": {
-    "axios": "^0.19.2"
+    "dev": "vite",
+    "build": "tsc && vite build",
+    "preview": "vite preview",
+    "update-schema": "wget https://dev.funkwhale.audio/funkwhale/funkwhale/-/jobs/artifacts/develop/raw/docs/schema.yml?job=build_docs -O schema.yml",
+    "generate-api": "oazapfts schema.yml src/api.ts"
   },
   "devDependencies": {
-    "@types/node": "^12.11.5",
-    "typescript": "^3.6.4"
+    "typescript": "^4.6.4",
+    "vite": "^3.1.0"
+  },
+  "dependencies": {
+    "oazapfts": "^4.1.0",
+    "vue": "^3.2.39",
+    "vuex": "^4.0.2"
   }
 }
diff --git a/schema.yml b/schema.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3798ea198292fb42f5d4d9ac16487ad61f443808
--- /dev/null
+++ b/schema.yml
@@ -0,0 +1,12641 @@
+openapi: 3.0.3
+info:
+  title: Funkwhale API
+  version: 1.2.8
+  description: "Interactive documentation for [Funkwhale](https://funkwhale.audio)\
+    \ API.\n\nBackward compatibility between minor versions (1.X to 1.Y) is guaranteed\
+    \ for all the\nendpoints documented here.\n\nUsage\n-----\n\nClick on an endpoint\
+    \ name to inspect its properties, parameters and responses.\n\nUse the \"Try it\
+    \ out\" button to send a real world payload to the endpoint and inspect\nthe corresponding\
+    \ response.\n\nOAuth Authentication\n--------------------\n\nYou can register\
+    \ your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the\
+    \ standard OAuth flow afterwards:\n\n- Our authorize URL is at `/authorize`\n\
+    - Our token acquisition and refresh URL is at `/api/v1/oauth/token`\n- The list\
+    \ of supported scopes is available by clicking the `Authorize` button in the Swagger\
+    \ UI documentation\n- Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if\
+    \ you want the user to get a copy-pastable authorization code\n- At the moment,\
+    \ endpoints that deal with admin or moderator-level content are not accessible\
+    \ via OAuth, only through the Web UI\n\nYou can use our demo server at `https://demo.funkwhale.audio`\
+    \ for testing purposes.\n\nApplication token authentication\n--------------------------------\n\
+    \nIf using OAuth isn't practical and you have an account on the Funkwhale pod,\
+    \ you can create an application by visiting `/settings`.\n\nOnce the application\
+    \ is created, you can authenticate using its access token in the `Authorization`\
+    \ header, like this: `Authorization: Bearer <token>`. \n\nRate limiting\n-------------\n\
+    \nDepending on server configuration, pods running Funkwhale 0.20 and higher may\
+    \ rate-limit incoming\nrequests to prevent abuse and improve the stability of\
+    \ service. Requests that are dropped because of rate-limiting\nreceive a 429 HTTP\
+    \ response.\n\nThe limits themselves vary depending on:\n\n- The client: anonymous\
+    \ requests are subject to lower limits than authenticated requests\n- The operation\
+    \ being performed: Write and delete operations, as performed with DELETE, POST,\
+    \ PUT and PATCH HTTP methods are subject to lower limits\n\nThose conditions are\
+    \ used to determine the scope of the request, which in turns determine the limit\
+    \ that is applied.\nFor instance, authenticated POST requests are bound to the\
+    \ `authenticated-create` scope, with a default limit of\n1000 requests/hour, but\
+    \ anonymous POST requests are bound to the `anonymous-create` scope, with a lower\
+    \ limit of 1000 requests/day.\n\nA full list of scopes with their corresponding\
+    \ description, and the current usage data for the client performing the request\n\
+    is available via the `/api/v1/rate-limit` endpoint.\n\nAdditionally, we include\
+    \ HTTP headers on all API response to ensure API clients can understand:\n\n-\
+    \ what scope was bound to a given request\n- what is the corresponding limit\n\
+    - how much similar requests can be sent before being limited\n- and how much time\
+    \ they should wait if they have been limited\n\n<table>\n<caption>Rate limiting\
+    \ headers</caption>\n<thead>\n<th>Header</th>\n<th>Example value</th>\n<th>Description\
+    \ value</th>\n</thead>\n<tbody>\n<tr>\n<td><code>X-RateLimit-Limit</code></td>\n\
+    <td>50</td>\n<td>The number of allowed requests whithin a given period</td>\n\
+    </tr>\n<tr>\n<td><code>X-RateLimit-Duration</code></td>\n<td>3600</td>\n<td>The\
+    \ time window, in seconds, during which those requests are accounted for.</td>\n\
+    </tr>\n<tr>\n<td><code>X-RateLimit-Scope</code></td>\n<td>login</td>\n<td>The\
+    \ name of the scope as computed for the request</td>\n</tr>\n<tr>\n<td><code>X-RateLimit-Remaining</code></td>\n\
+    <td>42</td>\n<td>How many requests can be sent with the same scope before the\
+    \ limit applies</td>\n</tr>\n<tr>\n<td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code>\
+    \ is 0)</td>\n<td>3543</td>\n<td>How many seconds to wait before a retry</td>\n\
+    </tr>\n<tr>\n<td><code>X-RateLimit-Reset</code></td>\n<td>1568126089</td>\n<td>A\
+    \ timestamp indicating when <code>X-RateLimit-Remaining</code> will return to\
+    \ its higher possible value</td>\n</tr>\n<tr>\n<td><code>X-RateLimit-ResetSeconds</code></td>\n\
+    <td>3599</td>\n<td>How many seconds to wait before <code>X-RateLimit-Remaining</code>\
+    \ returns to its higher possible value</td>\n</tr>\n</tbody>\n</table>\n\n\nResources\n\
+    ---------\n\nFor more targeted guides regarding API usage, and especially authentication,\
+    \ please\nrefer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html)\n"
+paths:
+  /api/v1/activity/:
+    get:
+      operationId: activity_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - activity
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/albums/:
+    get:
+      operationId: albums_list
+      parameters:
+      - in: query
+        name: artist
+        schema:
+          type: integer
+      - in: query
+        name: channel
+        schema:
+          type: string
+      - in: query
+        name: content_category
+        schema:
+          type: string
+      - in: query
+        name: hidden
+        schema:
+          type: boolean
+      - in: query
+        name: include_channels
+        schema:
+          type: boolean
+      - in: query
+        name: library
+        schema:
+          type: string
+      - in: query
+        name: mbid
+        schema:
+          type: string
+          format: uuid
+      - in: query
+        name: ordering
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - -artist__modification_date
+            - -creation_date
+            - -random
+            - -related
+            - -release_date
+            - -title
+            - artist__modification_date
+            - creation_date
+            - random
+            - related
+            - release_date
+            - title
+        description: Ordering
+        explode: false
+        style: form
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: playable
+        schema:
+          type: boolean
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: related
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      - in: query
+        name: tag
+        schema:
+          type: array
+          items:
+            type: string
+        explode: true
+        style: form
+      tags:
+      - albums
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedAlbumList'
+          description: ''
+    post:
+      operationId: albums_create
+      tags:
+      - albums
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/AlbumCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/AlbumCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/AlbumCreate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/AlbumCreate'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/AlbumCreate'
+          description: ''
+  /api/v1/albums/{id}/:
+    get:
+      operationId: albums_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - albums
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Album'
+          description: ''
+    delete:
+      operationId: albums_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - albums
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/albums/{id}/fetches/:
+    get:
+      operationId: albums_fetches_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - albums
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Album'
+          description: ''
+    post:
+      operationId: albums_fetches_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - albums
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Album'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Album'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Album'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Album'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Album'
+          description: ''
+  /api/v1/albums/{id}/libraries/:
+    get:
+      operationId: albums_libraries_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - albums
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Album'
+          description: ''
+  /api/v1/albums/{id}/mutations/:
+    get:
+      operationId: albums_mutations_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - albums
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Album'
+          description: ''
+    post:
+      operationId: albums_mutations_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - albums
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Album'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Album'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Album'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Album'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Album'
+          description: ''
+  /api/v1/artists/:
+    get:
+      operationId: artists_list
+      parameters:
+      - in: query
+        name: content_category
+        schema:
+          type: string
+      - in: query
+        name: has_albums
+        schema:
+          type: boolean
+      - in: query
+        name: hidden
+        schema:
+          type: boolean
+      - in: query
+        name: include_channels
+        schema:
+          type: boolean
+      - in: query
+        name: library
+        schema:
+          type: string
+      - in: query
+        name: mbid
+        schema:
+          type: string
+          format: uuid
+      - in: query
+        name: name
+        schema:
+          type: string
+      - in: query
+        name: name__icontains
+        schema:
+          type: string
+      - in: query
+        name: name__iexact
+        schema:
+          type: string
+      - in: query
+        name: name__startswith
+        schema:
+          type: string
+      - in: query
+        name: ordering
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - -creation_date
+            - -id
+            - -modification_date
+            - -name
+            - -random
+            - -related
+            - creation_date
+            - id
+            - modification_date
+            - name
+            - random
+            - related
+        description: Ordering
+        explode: false
+        style: form
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: playable
+        schema:
+          type: boolean
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: related
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      - in: query
+        name: tag
+        schema:
+          type: array
+          items:
+            type: string
+        explode: true
+        style: form
+      tags:
+      - artists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedArtistWithAlbumsList'
+          description: ''
+  /api/v1/artists/{id}/:
+    get:
+      operationId: artists_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - artists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArtistWithAlbums'
+          description: ''
+  /api/v1/artists/{id}/fetches/:
+    get:
+      operationId: artists_fetches_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - artists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArtistWithAlbums'
+          description: ''
+    post:
+      operationId: artists_fetches_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - artists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArtistWithAlbums'
+          description: ''
+  /api/v1/artists/{id}/libraries/:
+    get:
+      operationId: artists_libraries_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - artists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArtistWithAlbums'
+          description: ''
+  /api/v1/artists/{id}/mutations/:
+    get:
+      operationId: artists_mutations_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - artists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArtistWithAlbums'
+          description: ''
+    post:
+      operationId: artists_mutations_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - artists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ArtistWithAlbums'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ArtistWithAlbums'
+          description: ''
+  /api/v1/attachments/:
+    post:
+      operationId: attachments_create
+      tags:
+      - attachments
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Attachment'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Attachment'
+          description: ''
+  /api/v1/attachments/{uuid}/:
+    get:
+      operationId: attachments_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - attachments
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Attachment'
+          description: ''
+    delete:
+      operationId: attachments_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - attachments
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/attachments/{uuid}/proxy/:
+    get:
+      operationId: attachments_proxy_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - attachments
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Attachment'
+          description: ''
+  /api/v1/auth/password/change/:
+    post:
+      operationId: auth_password_change_create
+      description: |-
+        Calls Django Auth SetPasswordForm save method.
+
+        Accepts the following POST parameters: new_password1, new_password2
+        Returns the success/fail message.
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PasswordChange'
+          description: ''
+  /api/v1/auth/password/reset/:
+    post:
+      operationId: auth_password_reset_create
+      description: |-
+        Calls Django Auth PasswordResetForm save method.
+
+        Accepts the following POST parameters: email
+        Returns the success/fail message.
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PasswordReset'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PasswordReset'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PasswordReset'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PasswordReset'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      - {}
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PasswordReset'
+          description: ''
+  /api/v1/auth/password/reset/confirm/:
+    post:
+      operationId: auth_password_reset_confirm_create
+      description: |-
+        Password reset e-mail link is confirmed, therefore
+        this resets the user's password.
+
+        Accepts the following POST parameters: token, uid,
+            new_password1, new_password2
+        Returns the success/fail message.
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PasswordResetConfirm'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PasswordResetConfirm'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PasswordResetConfirm'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PasswordResetConfirm'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      - {}
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PasswordResetConfirm'
+          description: ''
+  /api/v1/auth/registration/:
+    post:
+      operationId: auth_registration_create
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Register'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Register'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Register'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Register'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Register'
+          description: ''
+  /api/v1/auth/registration/change-password/:
+    post:
+      operationId: auth_registration_change_password_create
+      description: |-
+        Calls Django Auth SetPasswordForm save method.
+
+        Accepts the following POST parameters: new_password1, new_password2
+        Returns the success/fail message.
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PasswordChange'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PasswordChange'
+          description: ''
+  /api/v1/auth/registration/verify-email/:
+    post:
+      operationId: auth_registration_verify_email_create
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/VerifyEmail'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/VerifyEmail'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/VerifyEmail'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/VerifyEmail'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      - {}
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/VerifyEmail'
+          description: ''
+  /api/v1/auth/user/:
+    get:
+      operationId: auth_user_retrieve
+      description: |-
+        Reads and updates UserModel fields
+        Accepts GET, PUT, PATCH methods.
+
+        Default accepted fields: username, first_name, last_name
+        Default display fields: pk, username, email, first_name, last_name
+        Read-only fields: pk, email
+
+        Returns UserModel fields.
+      tags:
+      - auth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserDetails'
+          description: ''
+    put:
+      operationId: auth_user_update
+      description: |-
+        Reads and updates UserModel fields
+        Accepts GET, PUT, PATCH methods.
+
+        Default accepted fields: username, first_name, last_name
+        Default display fields: pk, username, email, first_name, last_name
+        Read-only fields: pk, email
+
+        Returns UserModel fields.
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserDetails'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserDetails'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserDetails'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserDetails'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserDetails'
+          description: ''
+    patch:
+      operationId: auth_user_partial_update
+      description: |-
+        Reads and updates UserModel fields
+        Accepts GET, PUT, PATCH methods.
+
+        Default accepted fields: username, first_name, last_name
+        Default display fields: pk, username, email, first_name, last_name
+        Read-only fields: pk, email
+
+        Returns UserModel fields.
+      tags:
+      - auth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserDetails'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedUserDetails'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedUserDetails'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserDetails'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserDetails'
+          description: ''
+  /api/v1/channels/:
+    get:
+      operationId: channels_list
+      parameters:
+      - in: query
+        name: external
+        schema:
+          type: boolean
+      - in: query
+        name: hidden
+        schema:
+          type: boolean
+      - in: query
+        name: ordering
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - -creation_date
+            - -modification_date
+            - -random
+            - creation_date
+            - modification_date
+            - random
+        description: Ordering
+        explode: false
+        style: form
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      - in: query
+        name: subscribed
+        schema:
+          type: boolean
+      - in: query
+        name: tag
+        schema:
+          type: array
+          items:
+            type: string
+        explode: true
+        style: form
+      tags:
+      - channels
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedChannelList'
+          description: ''
+    post:
+      operationId: channels_create
+      tags:
+      - channels
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChannelCreate'
+          description: ''
+  /api/v1/channels/{composite}/:
+    get:
+      operationId: channels_retrieve
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Channel'
+          description: ''
+    put:
+      operationId: channels_update
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ChannelUpdate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ChannelUpdate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ChannelUpdate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ChannelUpdate'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChannelUpdate'
+          description: ''
+    patch:
+      operationId: channels_partial_update
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedChannelUpdate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedChannelUpdate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedChannelUpdate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedChannelUpdate'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChannelUpdate'
+          description: ''
+    delete:
+      operationId: channels_destroy
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/channels/{composite}/rss/:
+    get:
+      operationId: channels_rss_retrieve
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Channel'
+          description: ''
+  /api/v1/channels/{composite}/subscribe/:
+    post:
+      operationId: channels_subscribe_create
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChannelCreate'
+          description: ''
+  /api/v1/channels/{composite}/unsubscribe/:
+    post:
+      operationId: channels_unsubscribe_create
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChannelCreate'
+          description: ''
+    delete:
+      operationId: channels_unsubscribe_destroy
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - channels
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/channels/metadata-choices/:
+    get:
+      operationId: channels_metadata_choices_retrieve
+      tags:
+      - channels
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Channel'
+          description: ''
+  /api/v1/channels/rss-subscribe/:
+    post:
+      operationId: channels_rss_subscribe_create
+      tags:
+      - channels
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ChannelCreate'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ChannelCreate'
+          description: ''
+  /api/v1/favorites/tracks/:
+    get:
+      operationId: favorites_tracks_list
+      parameters:
+      - in: query
+        name: hidden
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      tags:
+      - favorites
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedUserTrackFavoriteList'
+          description: ''
+    post:
+      operationId: favorites_tracks_create
+      tags:
+      - favorites
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          description: ''
+  /api/v1/favorites/tracks/{id}/:
+    delete:
+      operationId: favorites_tracks_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track favorite.
+        required: true
+      tags:
+      - favorites
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/favorites/tracks/all/:
+    get:
+      operationId: favorites_tracks_all_retrieve
+      description: |-
+        Return all the favorites of the current user, with only limited data
+        to have a performant endpoint and avoid lots of queries just to display
+        favorites status in the UI
+      tags:
+      - favorites
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserTrackFavorite'
+          description: ''
+  /api/v1/favorites/tracks/remove/:
+    post:
+      operationId: favorites_tracks_remove_create
+      tags:
+      - favorites
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserTrackFavoriteWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserTrackFavoriteWrite'
+          description: ''
+    delete:
+      operationId: favorites_tracks_remove_destroy
+      tags:
+      - favorites
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/federation/actors/{full_username}/:
+    get:
+      operationId: federation_actors_retrieve
+      parameters:
+      - in: path
+        name: full_username
+        schema:
+          type: string
+          pattern: ^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)$
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/FullActor'
+          description: ''
+  /api/v1/federation/actors/{full_username}/libraries/:
+    get:
+      operationId: federation_actors_libraries_retrieve
+      parameters:
+      - in: path
+        name: full_username
+        schema:
+          type: string
+          pattern: ^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)$
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/FullActor'
+          description: ''
+  /api/v1/federation/domains/:
+    get:
+      operationId: federation_domains_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedDomainList'
+          description: ''
+  /api/v1/federation/domains/{name}/:
+    get:
+      operationId: federation_domains_retrieve
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        description: A unique value identifying this domain.
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Domain'
+          description: ''
+  /api/v1/federation/fetches/:
+    post:
+      operationId: federation_fetches_create
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Fetch'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Fetch'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Fetch'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Fetch'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Fetch'
+          description: ''
+  /api/v1/federation/fetches/{id}/:
+    get:
+      operationId: federation_fetches_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this fetch.
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Fetch'
+          description: ''
+  /api/v1/federation/follows/library/:
+    get:
+      operationId: federation_follows_library_list
+      parameters:
+      - in: query
+        name: approved
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedLibraryFollowList'
+          description: ''
+    post:
+      operationId: federation_follows_library_create
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryFollow'
+          description: ''
+  /api/v1/federation/follows/library/{uuid}/:
+    get:
+      operationId: federation_follows_library_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryFollow'
+          description: ''
+    delete:
+      operationId: federation_follows_library_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/federation/follows/library/{uuid}/accept/:
+    post:
+      operationId: federation_follows_library_accept_create
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryFollow'
+          description: ''
+  /api/v1/federation/follows/library/{uuid}/reject/:
+    post:
+      operationId: federation_follows_library_reject_create
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/LibraryFollow'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryFollow'
+          description: ''
+  /api/v1/federation/follows/library/all/:
+    get:
+      operationId: federation_follows_library_all_retrieve
+      description: |-
+        Return all the subscriptions of the current user, with only limited data
+        to have a performant endpoint and avoid lots of queries just to display
+        subscription status in the UI
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryFollow'
+          description: ''
+  /api/v1/federation/inbox/:
+    get:
+      operationId: federation_inbox_list
+      parameters:
+      - in: query
+        name: activity__actor
+        schema:
+          type: integer
+      - in: query
+        name: activity__type
+        schema:
+          type: string
+      - in: query
+        name: before
+        schema:
+          type: number
+      - in: query
+        name: is_read
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedInboxItemList'
+          description: ''
+  /api/v1/federation/inbox/{id}/:
+    get:
+      operationId: federation_inbox_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this inbox item.
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/InboxItem'
+          description: ''
+    put:
+      operationId: federation_inbox_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this inbox item.
+        required: true
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/InboxItem'
+          description: ''
+    patch:
+      operationId: federation_inbox_partial_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this inbox item.
+        required: true
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedInboxItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedInboxItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedInboxItem'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedInboxItem'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/InboxItem'
+          description: ''
+  /api/v1/federation/inbox/action/:
+    post:
+      operationId: federation_inbox_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/InboxItem'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/InboxItem'
+          description: ''
+  /api/v1/federation/libraries/{uuid}/:
+    get:
+      operationId: federation_libraries_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - federation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Library'
+          description: ''
+  /api/v1/federation/libraries/{uuid}/scan/:
+    post:
+      operationId: federation_libraries_scan_create
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Library'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Library'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Library'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Library'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Library'
+          description: ''
+  /api/v1/federation/libraries/fetch/:
+    post:
+      operationId: federation_libraries_fetch_create
+      tags:
+      - federation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Library'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Library'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Library'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Library'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Library'
+          description: ''
+  /api/v1/history/listenings/:
+    get:
+      operationId: history_listenings_list
+      parameters:
+      - in: query
+        name: domain
+        schema:
+          type: string
+      - in: query
+        name: hidden
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: scope
+        schema:
+          type: string
+      - in: query
+        name: username
+        schema:
+          type: string
+      tags:
+      - history
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedListeningList'
+          description: ''
+    post:
+      operationId: history_listenings_create
+      tags:
+      - history
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ListeningWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ListeningWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ListeningWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ListeningWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ListeningWrite'
+          description: ''
+  /api/v1/history/listenings/{id}/:
+    get:
+      operationId: history_listenings_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this listening.
+        required: true
+      tags:
+      - history
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Listening'
+          description: ''
+  /api/v1/instance/admin/settings/:
+    get:
+      operationId: instance_admin_settings_list
+      description: |-
+        - list preferences
+        - detail given preference
+        - batch update preferences
+        - update a single preference
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      tags:
+      - instance
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/GlobalPreference'
+          description: ''
+  /api/v1/instance/admin/settings/{id}/:
+    get:
+      operationId: instance_admin_settings_retrieve
+      description: |-
+        - list preferences
+        - detail given preference
+        - batch update preferences
+        - update a single preference
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this Global preference.
+        required: true
+      tags:
+      - instance
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalPreference'
+          description: ''
+    put:
+      operationId: instance_admin_settings_update
+      description: |-
+        - list preferences
+        - detail given preference
+        - batch update preferences
+        - update a single preference
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this Global preference.
+        required: true
+      tags:
+      - instance
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalPreference'
+          description: ''
+    patch:
+      operationId: instance_admin_settings_partial_update
+      description: |-
+        - list preferences
+        - detail given preference
+        - batch update preferences
+        - update a single preference
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this Global preference.
+        required: true
+      tags:
+      - instance
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedGlobalPreference'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedGlobalPreference'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedGlobalPreference'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedGlobalPreference'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalPreference'
+          description: ''
+  /api/v1/instance/admin/settings/bulk/:
+    post:
+      operationId: instance_admin_settings_bulk_create
+      description: |-
+        Update multiple preferences at once
+
+        this is a long method because we ensure everything is valid
+        before actually persisting the changes
+      tags:
+      - instance
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/GlobalPreference'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalPreference'
+          description: ''
+  /api/v1/instance/nodeinfo/2.0/:
+    get:
+      operationId: instance_nodeinfo_2.0_retrieve
+      tags:
+      - instance
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/NodeInfo20'
+          description: ''
+  /api/v1/instance/settings/:
+    get:
+      operationId: instance_settings_retrieve
+      tags:
+      - instance
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/GlobalPreference'
+          description: ''
+  /api/v1/instance/spa-manifest.json:
+    get:
+      operationId: instance_spa_manifest.json_retrieve
+      tags:
+      - instance
+      responses:
+        '200':
+          description: No response body
+  /api/v1/libraries/:
+    get:
+      operationId: libraries_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: privacy_level
+        schema:
+          type: string
+          enum:
+          - everyone
+          - instance
+          - me
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      tags:
+      - libraries
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedLibraryForOwnerList'
+          description: ''
+    post:
+      operationId: libraries_create
+      tags:
+      - libraries
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryForOwner'
+          description: ''
+  /api/v1/libraries/{uuid}/:
+    get:
+      operationId: libraries_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - libraries
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryForOwner'
+          description: ''
+    put:
+      operationId: libraries_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - libraries
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryForOwner'
+          description: ''
+    patch:
+      operationId: libraries_partial_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - libraries
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedLibraryForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedLibraryForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedLibraryForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedLibraryForOwner'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryForOwner'
+          description: ''
+    delete:
+      operationId: libraries_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - libraries
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/libraries/{uuid}/follows/:
+    get:
+      operationId: libraries_follows_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - libraries
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryForOwner'
+          description: ''
+  /api/v1/libraries/fs-import/:
+    get:
+      operationId: libraries_fs_import_retrieve
+      tags:
+      - libraries
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryForOwner'
+          description: ''
+    post:
+      operationId: libraries_fs_import_create
+      tags:
+      - libraries
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/LibraryForOwner'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/LibraryForOwner'
+          description: ''
+    delete:
+      operationId: libraries_fs_import_destroy
+      tags:
+      - libraries
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/licenses/:
+    get:
+      operationId: licenses_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - licenses
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedLicenseList'
+          description: ''
+  /api/v1/licenses/{code}/:
+    get:
+      operationId: licenses_retrieve
+      parameters:
+      - in: path
+        name: code
+        schema:
+          type: string
+        description: A unique value identifying this license.
+        required: true
+      tags:
+      - licenses
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/License'
+          description: ''
+  /api/v1/listen/{uuid}/:
+    get:
+      operationId: listen_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - listen
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+  /api/v1/manage/accounts/:
+    get:
+      operationId: manage_accounts_list
+      parameters:
+      - in: query
+        name: domain
+        schema:
+          type: string
+      - in: query
+        name: local
+        schema:
+          type: boolean
+      - in: query
+        name: manually_approves_followers
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: type
+        schema:
+          type: string
+          enum:
+          - Application
+          - Group
+          - Organization
+          - Person
+          - Service
+          - Tombstone
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageActorList'
+          description: ''
+  /api/v1/manage/accounts/{id}/:
+    get:
+      operationId: manage_accounts_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          pattern: ^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)$
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageActor'
+          description: ''
+  /api/v1/manage/accounts/{id}/stats/:
+    get:
+      operationId: manage_accounts_stats_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: string
+          pattern: ^([a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+)$
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageActor'
+          description: ''
+  /api/v1/manage/accounts/action/:
+    post:
+      operationId: manage_accounts_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageActor'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageActor'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageActor'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageActor'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageActor'
+          description: ''
+  /api/v1/manage/channels/:
+    get:
+      operationId: manage_channels_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageChannelList'
+          description: ''
+  /api/v1/manage/channels/{composite}/:
+    get:
+      operationId: manage_channels_retrieve
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageChannel'
+          description: ''
+    delete:
+      operationId: manage_channels_destroy
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/channels/{composite}/stats/:
+    get:
+      operationId: manage_channels_stats_retrieve
+      parameters:
+      - in: path
+        name: composite
+        schema:
+          type: string
+          pattern: ^[^/]+$
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageChannel'
+          description: ''
+  /api/v1/manage/federation/domains/:
+    get:
+      operationId: manage_federation_domains_list
+      parameters:
+      - in: query
+        name: allowed
+        schema:
+          type: boolean
+      - in: query
+        name: name
+        schema:
+          type: string
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageDomainList'
+          description: ''
+    post:
+      operationId: manage_federation_domains_create
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageDomain'
+          description: ''
+  /api/v1/manage/federation/domains/{name}/:
+    get:
+      operationId: manage_federation_domains_retrieve
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        description: A unique value identifying this domain.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageDomain'
+          description: ''
+    put:
+      operationId: manage_federation_domains_update
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        description: A unique value identifying this domain.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageDomainUpdate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageDomainUpdate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageDomainUpdate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageDomainUpdate'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageDomainUpdate'
+          description: ''
+    patch:
+      operationId: manage_federation_domains_partial_update
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        description: A unique value identifying this domain.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageDomainUpdate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManageDomainUpdate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManageDomainUpdate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageDomainUpdate'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageDomainUpdate'
+          description: ''
+  /api/v1/manage/federation/domains/{name}/nodeinfo/:
+    get:
+      operationId: manage_federation_domains_nodeinfo_retrieve
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        description: A unique value identifying this domain.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageDomain'
+          description: ''
+  /api/v1/manage/federation/domains/{name}/stats/:
+    get:
+      operationId: manage_federation_domains_stats_retrieve
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        description: A unique value identifying this domain.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageDomain'
+          description: ''
+  /api/v1/manage/federation/domains/action/:
+    post:
+      operationId: manage_federation_domains_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageDomain'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageDomain'
+          description: ''
+  /api/v1/manage/library/albums/:
+    get:
+      operationId: manage_library_albums_list
+      parameters:
+      - in: query
+        name: artist
+        schema:
+          type: integer
+      - in: query
+        name: fid
+        schema:
+          type: string
+      - in: query
+        name: mbid
+        schema:
+          type: string
+          format: uuid
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: title
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageAlbumList'
+          description: ''
+  /api/v1/manage/library/albums/{id}/:
+    get:
+      operationId: manage_library_albums_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageAlbum'
+          description: ''
+    delete:
+      operationId: manage_library_albums_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/library/albums/{id}/stats/:
+    get:
+      operationId: manage_library_albums_stats_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this album.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageAlbum'
+          description: ''
+  /api/v1/manage/library/albums/action/:
+    post:
+      operationId: manage_library_albums_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageAlbum'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageAlbum'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageAlbum'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageAlbum'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageAlbum'
+          description: ''
+  /api/v1/manage/library/artists/:
+    get:
+      operationId: manage_library_artists_list
+      parameters:
+      - in: query
+        name: content_category
+        schema:
+          type: string
+          enum:
+          - music
+          - other
+          - podcast
+      - in: query
+        name: fid
+        schema:
+          type: string
+      - in: query
+        name: mbid
+        schema:
+          type: string
+          format: uuid
+      - in: query
+        name: name
+        schema:
+          type: string
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageArtistList'
+          description: ''
+  /api/v1/manage/library/artists/{id}/:
+    get:
+      operationId: manage_library_artists_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageArtist'
+          description: ''
+    delete:
+      operationId: manage_library_artists_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/library/artists/{id}/stats/:
+    get:
+      operationId: manage_library_artists_stats_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this artist.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageArtist'
+          description: ''
+  /api/v1/manage/library/artists/action/:
+    post:
+      operationId: manage_library_artists_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageArtist'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageArtist'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageArtist'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageArtist'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageArtist'
+          description: ''
+  /api/v1/manage/library/libraries/:
+    get:
+      operationId: manage_library_libraries_list
+      parameters:
+      - in: query
+        name: domain
+        schema:
+          type: string
+      - in: query
+        name: fid
+        schema:
+          type: string
+      - in: query
+        name: name
+        schema:
+          type: string
+      - in: query
+        name: ordering
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - -creation_date
+            - -followers_count
+            - -uploads_count
+            - creation_date
+            - followers_count
+            - uploads_count
+        description: Ordering
+        explode: false
+        style: form
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: privacy_level
+        schema:
+          type: string
+          enum:
+          - everyone
+          - instance
+          - me
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageLibraryList'
+          description: ''
+  /api/v1/manage/library/libraries/{uuid}/:
+    get:
+      operationId: manage_library_libraries_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageLibrary'
+          description: ''
+    put:
+      operationId: manage_library_libraries_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageLibrary'
+          description: ''
+    patch:
+      operationId: manage_library_libraries_partial_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageLibrary'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManageLibrary'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManageLibrary'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageLibrary'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageLibrary'
+          description: ''
+    delete:
+      operationId: manage_library_libraries_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/library/libraries/{uuid}/stats/:
+    get:
+      operationId: manage_library_libraries_stats_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageLibrary'
+          description: ''
+  /api/v1/manage/library/libraries/action/:
+    post:
+      operationId: manage_library_libraries_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageLibrary'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageLibrary'
+          description: ''
+  /api/v1/manage/library/tracks/:
+    get:
+      operationId: manage_library_tracks_list
+      parameters:
+      - in: query
+        name: album
+        schema:
+          type: integer
+      - in: query
+        name: artist
+        schema:
+          type: integer
+      - in: query
+        name: fid
+        schema:
+          type: string
+      - in: query
+        name: license
+        schema:
+          type: string
+      - in: query
+        name: mbid
+        schema:
+          type: string
+          format: uuid
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: title
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageTrackList'
+          description: ''
+  /api/v1/manage/library/tracks/{id}/:
+    get:
+      operationId: manage_library_tracks_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageTrack'
+          description: ''
+    delete:
+      operationId: manage_library_tracks_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/library/tracks/{id}/stats/:
+    get:
+      operationId: manage_library_tracks_stats_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageTrack'
+          description: ''
+  /api/v1/manage/library/tracks/action/:
+    post:
+      operationId: manage_library_tracks_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageTrack'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageTrack'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageTrack'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageTrack'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageTrack'
+          description: ''
+  /api/v1/manage/library/uploads/:
+    get:
+      operationId: manage_library_uploads_list
+      parameters:
+      - in: query
+        name: domain
+        schema:
+          type: string
+      - in: query
+        name: fid
+        schema:
+          type: string
+      - in: query
+        name: import_reference
+        schema:
+          type: string
+      - in: query
+        name: import_status
+        schema:
+          type: string
+          enum:
+          - draft
+          - errored
+          - finished
+          - pending
+          - skipped
+      - in: query
+        name: mimetype
+        schema:
+          type: string
+      - in: query
+        name: ordering
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - -accessed_date
+            - -bitrate
+            - -creation_date
+            - -duration
+            - -modification_date
+            - -size
+            - accessed_date
+            - bitrate
+            - creation_date
+            - duration
+            - modification_date
+            - size
+        description: Ordering
+        explode: false
+        style: form
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: privacy_level
+        schema:
+          type: string
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageUploadList'
+          description: ''
+  /api/v1/manage/library/uploads/{uuid}/:
+    get:
+      operationId: manage_library_uploads_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUpload'
+          description: ''
+    delete:
+      operationId: manage_library_uploads_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/library/uploads/action/:
+    post:
+      operationId: manage_library_uploads_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageUpload'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageUpload'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageUpload'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageUpload'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUpload'
+          description: ''
+  /api/v1/manage/moderation/instance-policies/:
+    get:
+      operationId: manage_moderation_instance_policies_list
+      parameters:
+      - in: query
+        name: block_all
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: reject_media
+        schema:
+          type: boolean
+      - in: query
+        name: silence_activity
+        schema:
+          type: boolean
+      - in: query
+        name: silence_notifications
+        schema:
+          type: boolean
+      - in: query
+        name: target_account_domain
+        schema:
+          type: string
+      - in: query
+        name: target_account_username
+        schema:
+          type: string
+      - in: query
+        name: target_domain
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageInstancePolicyList'
+          description: ''
+    post:
+      operationId: manage_moderation_instance_policies_create
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInstancePolicy'
+          description: ''
+  /api/v1/manage/moderation/instance-policies/{id}/:
+    get:
+      operationId: manage_moderation_instance_policies_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this instance policy.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInstancePolicy'
+          description: ''
+    put:
+      operationId: manage_moderation_instance_policies_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this instance policy.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageInstancePolicy'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInstancePolicy'
+          description: ''
+    patch:
+      operationId: manage_moderation_instance_policies_partial_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this instance policy.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInstancePolicy'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInstancePolicy'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInstancePolicy'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInstancePolicy'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInstancePolicy'
+          description: ''
+    delete:
+      operationId: manage_moderation_instance_policies_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this instance policy.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/moderation/notes/:
+    get:
+      operationId: manage_moderation_notes_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageNoteList'
+          description: ''
+    post:
+      operationId: manage_moderation_notes_create
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageNote'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageNote'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageNote'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageNote'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageNote'
+          description: ''
+  /api/v1/manage/moderation/notes/{uuid}/:
+    get:
+      operationId: manage_moderation_notes_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageNote'
+          description: ''
+    delete:
+      operationId: manage_moderation_notes_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/moderation/reports/:
+    get:
+      operationId: manage_moderation_reports_list
+      parameters:
+      - in: query
+        name: is_handled
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: submitter_email
+        schema:
+          type: string
+      - in: query
+        name: type
+        schema:
+          type: string
+          enum:
+          - illegal_content
+          - invalid_metadata
+          - offensive_content
+          - other
+          - takedown_request
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageReportList'
+          description: ''
+  /api/v1/manage/moderation/reports/{uuid}/:
+    get:
+      operationId: manage_moderation_reports_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageReport'
+          description: ''
+    put:
+      operationId: manage_moderation_reports_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageReport'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageReport'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageReport'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageReport'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageReport'
+          description: ''
+    patch:
+      operationId: manage_moderation_reports_partial_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageReport'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManageReport'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManageReport'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageReport'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageReport'
+          description: ''
+  /api/v1/manage/moderation/requests/:
+    get:
+      operationId: manage_moderation_requests_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: status
+        schema:
+          type: string
+          enum:
+          - approved
+          - pending
+          - refused
+      - in: query
+        name: type
+        schema:
+          type: string
+          enum:
+          - signup
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageUserRequestList'
+          description: ''
+  /api/v1/manage/moderation/requests/{uuid}/:
+    get:
+      operationId: manage_moderation_requests_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUserRequest'
+          description: ''
+    put:
+      operationId: manage_moderation_requests_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageUserRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageUserRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageUserRequest'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageUserRequest'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUserRequest'
+          description: ''
+    patch:
+      operationId: manage_moderation_requests_partial_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUserRequest'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUserRequest'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUserRequest'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUserRequest'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUserRequest'
+          description: ''
+  /api/v1/manage/tags/:
+    get:
+      operationId: manage_tags_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageTagList'
+          description: ''
+    post:
+      operationId: manage_tags_create
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageTag'
+          description: ''
+  /api/v1/manage/tags/{name}/:
+    get:
+      operationId: manage_tags_retrieve
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageTag'
+          description: ''
+    delete:
+      operationId: manage_tags_destroy
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/manage/tags/action/:
+    post:
+      operationId: manage_tags_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageTag'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageTag'
+          description: ''
+  /api/v1/manage/users/invitations/:
+    get:
+      operationId: manage_users_invitations_list
+      parameters:
+      - in: query
+        name: is_open
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageInvitationList'
+          description: ''
+    post:
+      operationId: manage_users_invitations_create
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInvitation'
+          description: ''
+  /api/v1/manage/users/invitations/{id}/:
+    get:
+      operationId: manage_users_invitations_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this invitation.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInvitation'
+          description: ''
+    put:
+      operationId: manage_users_invitations_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this invitation.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInvitation'
+          description: ''
+    patch:
+      operationId: manage_users_invitations_partial_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this invitation.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInvitation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInvitation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInvitation'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageInvitation'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInvitation'
+          description: ''
+  /api/v1/manage/users/invitations/action/:
+    post:
+      operationId: manage_users_invitations_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageInvitation'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageInvitation'
+          description: ''
+  /api/v1/manage/users/users/:
+    get:
+      operationId: manage_users_users_list
+      parameters:
+      - in: query
+        name: is_active
+        schema:
+          type: boolean
+      - in: query
+        name: is_staff
+        schema:
+          type: boolean
+      - in: query
+        name: is_superuser
+        schema:
+          type: boolean
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: permission_library
+        schema:
+          type: boolean
+      - in: query
+        name: permission_moderation
+        schema:
+          type: boolean
+      - in: query
+        name: permission_settings
+        schema:
+          type: boolean
+      - in: query
+        name: privacy_level
+        schema:
+          type: string
+          enum:
+          - everyone
+          - followers
+          - instance
+          - me
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedManageUserList'
+          description: ''
+  /api/v1/manage/users/users/{id}/:
+    get:
+      operationId: manage_users_users_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this user.
+        required: true
+      tags:
+      - manage
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUser'
+          description: ''
+    put:
+      operationId: manage_users_users_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this user.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/ManageUser'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/ManageUser'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/ManageUser'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/ManageUser'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUser'
+          description: ''
+    patch:
+      operationId: manage_users_users_partial_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this user.
+        required: true
+      tags:
+      - manage
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUser'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUser'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUser'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedManageUser'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/ManageUser'
+          description: ''
+  /api/v1/moderation/content-filters/:
+    get:
+      operationId: moderation_content_filters_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - moderation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedUserFilterList'
+          description: ''
+    post:
+      operationId: moderation_content_filters_create
+      tags:
+      - moderation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserFilter'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserFilter'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserFilter'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserFilter'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFilter'
+          description: ''
+  /api/v1/moderation/content-filters/{uuid}/:
+    get:
+      operationId: moderation_content_filters_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - moderation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserFilter'
+          description: ''
+    delete:
+      operationId: moderation_content_filters_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - moderation
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/moderation/reports/:
+    post:
+      operationId: moderation_reports_create
+      tags:
+      - moderation
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Report'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Report'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Report'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Report'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Report'
+          description: ''
+  /api/v1/mutations/:
+    get:
+      operationId: mutations_list
+      parameters:
+      - in: query
+        name: is_applied
+        schema:
+          type: boolean
+      - in: query
+        name: is_approved
+        schema:
+          type: boolean
+          nullable: true
+          enum:
+          - '0'
+          - '1'
+          - false
+          - 'False'
+          - None
+          - 'Null'
+          - true
+          - 'True'
+          - 'false'
+          - 'no'
+          - none
+          - 'null'
+          - 'true'
+          - 'yes'
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: type
+        schema:
+          type: string
+      tags:
+      - mutations
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedAPIMutationList'
+          description: ''
+  /api/v1/mutations/{uuid}/:
+    get:
+      operationId: mutations_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - mutations
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIMutation'
+          description: ''
+    delete:
+      operationId: mutations_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - mutations
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/mutations/{uuid}/approve/:
+    post:
+      operationId: mutations_approve_create
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - mutations
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIMutation'
+          description: ''
+  /api/v1/mutations/{uuid}/reject/:
+    post:
+      operationId: mutations_reject_create
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - mutations
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/APIMutation'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/APIMutation'
+          description: ''
+  /api/v1/oauth/apps/:
+    get:
+      operationId: oauth_apps_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedApplicationList'
+          description: ''
+    post:
+      operationId: oauth_apps_create
+      tags:
+      - oauth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CreateApplication'
+          description: ''
+  /api/v1/oauth/apps/{client_id}/:
+    get:
+      operationId: oauth_apps_retrieve
+      parameters:
+      - in: path
+        name: client_id
+        schema:
+          type: string
+        required: true
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Application'
+          description: ''
+    put:
+      operationId: oauth_apps_update
+      parameters:
+      - in: path
+        name: client_id
+        schema:
+          type: string
+        required: true
+      tags:
+      - oauth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Application'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Application'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Application'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Application'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Application'
+          description: ''
+    patch:
+      operationId: oauth_apps_partial_update
+      parameters:
+      - in: path
+        name: client_id
+        schema:
+          type: string
+        required: true
+      tags:
+      - oauth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedApplication'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedApplication'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedApplication'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedApplication'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Application'
+          description: ''
+    delete:
+      operationId: oauth_apps_destroy
+      parameters:
+      - in: path
+        name: client_id
+        schema:
+          type: string
+        required: true
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/oauth/apps/{client_id}/refresh-token/:
+    post:
+      operationId: oauth_apps_refresh_token_create
+      parameters:
+      - in: path
+        name: client_id
+        schema:
+          type: string
+        required: true
+      tags:
+      - oauth
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/CreateApplication'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/CreateApplication'
+          description: ''
+  /api/v1/oauth/authorize/:
+    get:
+      operationId: oauth_authorize_retrieve
+      description: 'Handle GET requests: instantiate a blank version of the form.'
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+    post:
+      operationId: oauth_authorize_create
+      description: |-
+        Handle POST requests: instantiate a form instance with the passed
+        POST variables and then check if it's valid.
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+    put:
+      operationId: oauth_authorize_update
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/oauth/grants/:
+    get:
+      operationId: oauth_grants_list
+      description: |-
+        This is a viewset that list applications that have access to the request user
+        account, to allow revoking tokens easily.
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                type: array
+                items:
+                  $ref: '#/components/schemas/Application'
+          description: ''
+  /api/v1/oauth/grants/{client_id}/:
+    get:
+      operationId: oauth_grants_retrieve
+      description: |-
+        This is a viewset that list applications that have access to the request user
+        account, to allow revoking tokens easily.
+      parameters:
+      - in: path
+        name: client_id
+        schema:
+          type: string
+        required: true
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Application'
+          description: ''
+    delete:
+      operationId: oauth_grants_destroy
+      description: |-
+        This is a viewset that list applications that have access to the request user
+        account, to allow revoking tokens easily.
+      parameters:
+      - in: path
+        name: client_id
+        schema:
+          type: string
+        required: true
+      tags:
+      - oauth
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/oembed/:
+    get:
+      operationId: oembed_retrieve
+      tags:
+      - oembed
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/playlists/:
+    get:
+      operationId: playlists_list
+      parameters:
+      - in: query
+        name: album
+        schema:
+          type: integer
+      - in: query
+        name: artist
+        schema:
+          type: integer
+      - in: query
+        name: name
+        schema:
+          type: string
+      - in: query
+        name: name__icontains
+        schema:
+          type: string
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: playable
+        schema:
+          type: boolean
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      - in: query
+        name: track
+        schema:
+          type: integer
+      tags:
+      - playlists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedPlaylistList'
+          description: ''
+    post:
+      operationId: playlists_create
+      tags:
+      - playlists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+  /api/v1/playlists/{id}/:
+    get:
+      operationId: playlists_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+    put:
+      operationId: playlists_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+    patch:
+      operationId: playlists_partial_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedPlaylist'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedPlaylist'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedPlaylist'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedPlaylist'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+    delete:
+      operationId: playlists_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/playlists/{id}/add/:
+    post:
+      operationId: playlists_add_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+  /api/v1/playlists/{id}/clear/:
+    delete:
+      operationId: playlists_clear_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/playlists/{id}/move/:
+    post:
+      operationId: playlists_move_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+  /api/v1/playlists/{id}/remove/:
+    post:
+      operationId: playlists_remove_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Playlist'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+    delete:
+      operationId: playlists_remove_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/playlists/{id}/tracks/:
+    get:
+      operationId: playlists_tracks_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this playlist.
+        required: true
+      tags:
+      - playlists
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Playlist'
+          description: ''
+  /api/v1/plugins/:
+    get:
+      operationId: plugins_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - plugins
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+    post:
+      operationId: plugins_create
+      tags:
+      - plugins
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          description: No response body
+  /api/v1/plugins/{id}/:
+    get:
+      operationId: plugins_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this plugin configuration.
+        required: true
+      tags:
+      - plugins
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/plugins/{id}/disable/:
+    post:
+      operationId: plugins_disable_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this plugin configuration.
+        required: true
+      tags:
+      - plugins
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/plugins/{id}/enable/:
+    post:
+      operationId: plugins_enable_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this plugin configuration.
+        required: true
+      tags:
+      - plugins
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/plugins/{id}/scan/:
+    post:
+      operationId: plugins_scan_create
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this plugin configuration.
+        required: true
+      tags:
+      - plugins
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/radios/radios/:
+    get:
+      operationId: radios_radios_list
+      parameters:
+      - in: query
+        name: name
+        schema:
+          type: string
+      - in: query
+        name: name__icontains
+        schema:
+          type: string
+      - in: query
+        name: name__iexact
+        schema:
+          type: string
+      - in: query
+        name: name__startswith
+        schema:
+          type: string
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      tags:
+      - radios
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedRadioList'
+          description: ''
+    post:
+      operationId: radios_radios_create
+      tags:
+      - radios
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Radio'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Radio'
+          description: ''
+  /api/v1/radios/radios/{id}/:
+    get:
+      operationId: radios_radios_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this radio.
+        required: true
+      tags:
+      - radios
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Radio'
+          description: ''
+    put:
+      operationId: radios_radios_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this radio.
+        required: true
+      tags:
+      - radios
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Radio'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Radio'
+          description: ''
+    patch:
+      operationId: radios_radios_partial_update
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this radio.
+        required: true
+      tags:
+      - radios
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedRadio'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedRadio'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedRadio'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedRadio'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Radio'
+          description: ''
+    delete:
+      operationId: radios_radios_destroy
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this radio.
+        required: true
+      tags:
+      - radios
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/radios/radios/{id}/tracks/:
+    get:
+      operationId: radios_radios_tracks_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this radio.
+        required: true
+      tags:
+      - radios
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Radio'
+          description: ''
+  /api/v1/radios/radios/filters/:
+    get:
+      operationId: radios_radios_filters_retrieve
+      tags:
+      - radios
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Radio'
+          description: ''
+  /api/v1/radios/radios/validate/:
+    post:
+      operationId: radios_radios_validate_create
+      tags:
+      - radios
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Radio'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Radio'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Radio'
+          description: ''
+  /api/v1/radios/sessions/:
+    post:
+      operationId: radios_sessions_create
+      tags:
+      - radios
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RadioSession'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/RadioSession'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/RadioSession'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/RadioSession'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RadioSession'
+          description: ''
+  /api/v1/radios/sessions/{id}/:
+    get:
+      operationId: radios_sessions_retrieve
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this radio session.
+        required: true
+      tags:
+      - radios
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RadioSession'
+          description: ''
+  /api/v1/radios/tracks/:
+    post:
+      operationId: radios_tracks_create
+      tags:
+      - radios
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/RadioSessionTrackSerializerCreate'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/RadioSessionTrackSerializerCreate'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/RadioSessionTrackSerializerCreate'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/RadioSessionTrackSerializerCreate'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RadioSessionTrackSerializerCreate'
+          description: ''
+  /api/v1/rate-limit/:
+    get:
+      operationId: rate_limit_retrieve
+      tags:
+      - rate-limit
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/RateLimit'
+          description: ''
+  /api/v1/search:
+    get:
+      operationId: search_retrieve
+      tags:
+      - search
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/stream/{uuid}/:
+    get:
+      operationId: stream_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - stream
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            audio/mpeg:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+  /api/v1/subscriptions/:
+    get:
+      operationId: subscriptions_list
+      parameters:
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      tags:
+      - subscriptions
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedSubscriptionList'
+          description: ''
+  /api/v1/subscriptions/{uuid}/:
+    get:
+      operationId: subscriptions_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - subscriptions
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Subscription'
+          description: ''
+  /api/v1/subscriptions/all/:
+    get:
+      operationId: subscriptions_all_retrieve
+      description: |-
+        Return all the subscriptions of the current user, with only limited data
+        to have a performant endpoint and avoid lots of queries just to display
+        subscription status in the UI
+      tags:
+      - subscriptions
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Subscription'
+          description: ''
+  /api/v1/tags/:
+    get:
+      operationId: tags_list
+      parameters:
+      - in: query
+        name: name
+        schema:
+          type: string
+      - in: query
+        name: name__startswith
+        schema:
+          type: string
+      - in: query
+        name: ordering
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - -creation_date
+            - -length
+            - -name
+            - creation_date
+            - length
+            - name
+        description: Ordering
+        explode: false
+        style: form
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: q
+        schema:
+          type: string
+      tags:
+      - tags
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedTagList'
+          description: ''
+  /api/v1/tags/{name}/:
+    get:
+      operationId: tags_retrieve
+      parameters:
+      - in: path
+        name: name
+        schema:
+          type: string
+        required: true
+      tags:
+      - tags
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Tag'
+          description: ''
+  /api/v1/text-preview/:
+    post:
+      operationId: text_preview_create
+      tags:
+      - text-preview
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          description: No response body
+  /api/v1/tracks/:
+    get:
+      operationId: tracks_list
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: query
+        name: album
+        schema:
+          type: integer
+      - in: query
+        name: artist
+        schema:
+          type: string
+      - in: query
+        name: channel
+        schema:
+          type: string
+      - in: query
+        name: hidden
+        schema:
+          type: boolean
+      - in: query
+        name: id
+        schema:
+          type: array
+          items:
+            type: integer
+        explode: true
+        style: form
+      - in: query
+        name: include_channels
+        schema:
+          type: boolean
+      - in: query
+        name: library
+        schema:
+          type: string
+      - in: query
+        name: license
+        schema:
+          type: string
+      - in: query
+        name: mbid
+        schema:
+          type: string
+          format: uuid
+      - in: query
+        name: ordering
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - -album__release_date
+            - -album__title
+            - -artist__modification_date
+            - -artist__name
+            - -creation_date
+            - -disc_number
+            - -position
+            - -random
+            - -related
+            - -size
+            - -title
+            - album__release_date
+            - album__title
+            - artist__modification_date
+            - artist__name
+            - creation_date
+            - disc_number
+            - position
+            - random
+            - related
+            - size
+            - title
+        description: Ordering
+        explode: false
+        style: form
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: playable
+        schema:
+          type: boolean
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: related
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      - in: query
+        name: tag
+        schema:
+          type: array
+          items:
+            type: string
+        explode: true
+        style: form
+      - in: query
+        name: title
+        schema:
+          type: string
+      - in: query
+        name: title__icontains
+        schema:
+          type: string
+      - in: query
+        name: title__iexact
+        schema:
+          type: string
+      - in: query
+        name: title__startswith
+        schema:
+          type: string
+      tags:
+      - tracks
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedTrackList'
+          description: ''
+  /api/v1/tracks/{id}/:
+    get:
+      operationId: tracks_retrieve
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - tracks
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+    delete:
+      operationId: tracks_destroy
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - tracks
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/tracks/{id}/fetches/:
+    get:
+      operationId: tracks_fetches_retrieve
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - tracks
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+    post:
+      operationId: tracks_fetches_create
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - tracks
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Track'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Track'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Track'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Track'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+  /api/v1/tracks/{id}/libraries/:
+    get:
+      operationId: tracks_libraries_retrieve
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - tracks
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+  /api/v1/tracks/{id}/mutations/:
+    get:
+      operationId: tracks_mutations_retrieve
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - tracks
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+    post:
+      operationId: tracks_mutations_create
+      description: A simple ViewSet for viewing and editing accounts.
+      parameters:
+      - in: path
+        name: id
+        schema:
+          type: integer
+        description: A unique integer value identifying this track.
+        required: true
+      tags:
+      - tracks
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/Track'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/Track'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/Track'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/Track'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Track'
+          description: ''
+  /api/v1/uploads/:
+    get:
+      operationId: uploads_list
+      parameters:
+      - in: query
+        name: album_artist
+        schema:
+          type: string
+          format: uuid
+      - in: query
+        name: channel
+        schema:
+          type: string
+      - in: query
+        name: import_reference
+        schema:
+          type: string
+      - in: query
+        name: import_status
+        schema:
+          type: array
+          items:
+            type: string
+            enum:
+            - draft
+            - errored
+            - finished
+            - pending
+            - skipped
+        explode: true
+        style: form
+      - in: query
+        name: include_channels
+        schema:
+          type: boolean
+      - in: query
+        name: library
+        schema:
+          type: string
+          format: uuid
+      - in: query
+        name: mimetype
+        schema:
+          type: string
+      - name: ordering
+        required: false
+        in: query
+        description: Which field to use when ordering the results.
+        schema:
+          type: string
+      - name: page
+        required: false
+        in: query
+        description: A page number within the paginated result set.
+        schema:
+          type: integer
+      - name: page_size
+        required: false
+        in: query
+        description: Number of results to return per page.
+        schema:
+          type: integer
+      - in: query
+        name: playable
+        schema:
+          type: boolean
+      - in: query
+        name: q
+        schema:
+          type: string
+      - in: query
+        name: scope
+        schema:
+          type: string
+      - in: query
+        name: track
+        schema:
+          type: string
+          format: uuid
+      - in: query
+        name: track_artist
+        schema:
+          type: string
+          format: uuid
+      tags:
+      - uploads
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/PaginatedUploadForOwnerList'
+          description: ''
+    post:
+      operationId: uploads_create
+      tags:
+      - uploads
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '201':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UploadForOwner'
+          description: ''
+  /api/v1/uploads/{uuid}/:
+    get:
+      operationId: uploads_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - uploads
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UploadForOwner'
+          description: ''
+    put:
+      operationId: uploads_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - uploads
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UploadForOwner'
+          description: ''
+    patch:
+      operationId: uploads_partial_update
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - uploads
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedUploadForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedUploadForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedUploadForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedUploadForOwner'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UploadForOwner'
+          description: ''
+    delete:
+      operationId: uploads_destroy
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - uploads
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/uploads/{uuid}/audio-file-metadata/:
+    get:
+      operationId: uploads_audio_file_metadata_retrieve
+      parameters:
+      - in: path
+        name: uuid
+        schema:
+          type: string
+          format: uuid
+        required: true
+      tags:
+      - uploads
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UploadForOwner'
+          description: ''
+  /api/v1/uploads/action/:
+    post:
+      operationId: uploads_action_create
+      description: |-
+        str(object='') -> str
+        str(bytes_or_buffer[, encoding[, errors]]) -> str
+
+        Create a new string object from the given object. If encoding or
+        errors is specified, then the object must expose a data buffer
+        that will be decoded using the given encoding and error handler.
+        Otherwise, returns the result of object.__str__() (if defined)
+        or repr(object).
+        encoding defaults to sys.getdefaultencoding().
+        errors defaults to 'strict'.
+      tags:
+      - uploads
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UploadForOwner'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UploadForOwner'
+          description: ''
+  /api/v1/users/{username}/:
+    put:
+      operationId: users_update
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    patch:
+      operationId: users_partial_update
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+  /api/v1/users/{username}/subsonic-token/:
+    get:
+      operationId: users_subsonic_token_retrieve
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    post:
+      operationId: users_subsonic_token_create
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    delete:
+      operationId: users_subsonic_token_destroy
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/users/change-email/:
+    post:
+      operationId: users_change_email_create
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+  /api/v1/users/me/:
+    get:
+      operationId: users_me_retrieve
+      description: Return information about the current user or delete it
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    delete:
+      operationId: users_me_destroy
+      description: Return information about the current user or delete it
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/users/settings/:
+    post:
+      operationId: users_settings_create
+      description: Return information about the current user or delete it
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+  /api/v1/users/users/{username}/:
+    put:
+      operationId: users_users_update
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    patch:
+      operationId: users_users_partial_update
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/PatchedUserWrite'
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+  /api/v1/users/users/{username}/subsonic-token/:
+    get:
+      operationId: users_users_subsonic_token_retrieve
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    post:
+      operationId: users_users_subsonic_token_create
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    delete:
+      operationId: users_users_subsonic_token_destroy
+      parameters:
+      - in: path
+        name: username
+        schema:
+          type: string
+          pattern: ^[a-zA-Z0-9-_.]+$
+        required: true
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/users/users/change-email/:
+    post:
+      operationId: users_users_change_email_create
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+  /api/v1/users/users/me/:
+    get:
+      operationId: users_users_me_retrieve
+      description: Return information about the current user or delete it
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+    delete:
+      operationId: users_users_me_destroy
+      description: Return information about the current user or delete it
+      tags:
+      - users
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '204':
+          description: No response body
+  /api/v1/users/users/settings/:
+    post:
+      operationId: users_users_settings_create
+      description: Return information about the current user or delete it
+      tags:
+      - users
+      requestBody:
+        content:
+          application/json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/x-www-form-urlencoded:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          multipart/form-data:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+          application/activity+json:
+            schema:
+              $ref: '#/components/schemas/UserWrite'
+        required: true
+      security:
+      - oauth2: []
+      - ApplicationToken: []
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/UserWrite'
+          description: ''
+components:
+  schemas:
+    APIActor:
+      type: object
+      properties:
+        fid:
+          type: string
+          format: uri
+          maxLength: 500
+        url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        creation_date:
+          type: string
+          format: date-time
+        summary:
+          type: string
+          nullable: true
+          maxLength: 500
+        preferred_username:
+          type: string
+          nullable: true
+          maxLength: 200
+        name:
+          type: string
+          nullable: true
+          maxLength: 200
+        last_fetch_date:
+          type: string
+          format: date-time
+        domain:
+          type: string
+        type:
+          $ref: '#/components/schemas/FederationChoiceEnum'
+        manually_approves_followers:
+          type: boolean
+          nullable: true
+        full_username:
+          type: string
+          readOnly: true
+        is_local:
+          type: boolean
+          readOnly: true
+      required:
+      - domain
+      - fid
+      - full_username
+      - is_local
+      - preferred_username
+    APIMutation:
+      type: object
+      properties:
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        type:
+          type: string
+          maxLength: 100
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        applied_date:
+          type: string
+          format: date-time
+          nullable: true
+        is_approved:
+          type: boolean
+          nullable: true
+        is_applied:
+          type: boolean
+          readOnly: true
+          nullable: true
+        created_by:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+        approved_by:
+          type: integer
+          readOnly: true
+          nullable: true
+        summary:
+          type: string
+          nullable: true
+          maxLength: 2000
+        payload:
+          type: object
+          additionalProperties: {}
+        previous_state:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+          nullable: true
+        target:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+      required:
+      - approved_by
+      - created_by
+      - creation_date
+      - fid
+      - is_applied
+      - payload
+      - previous_state
+      - target
+      - type
+      - uuid
+    Activity:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        actor:
+          $ref: '#/components/schemas/APIActor'
+        payload:
+          type: object
+          additionalProperties: {}
+        object:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        target:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        related_object:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+        type:
+          type: string
+          nullable: true
+          maxLength: 100
+      required:
+      - actor
+      - object
+      - related_object
+      - target
+    Album:
+      type: object
+      properties:
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        artist:
+          $ref: '#/components/schemas/SimpleArtist'
+        is_playable:
+          type: boolean
+          readOnly: true
+        tags:
+          type: array
+          items:
+            type: string
+          readOnly: true
+        tracks_count:
+          type: integer
+          readOnly: true
+        attributed_to:
+          $ref: '#/components/schemas/APIActor'
+        id:
+          type: integer
+        fid:
+          type: string
+          format: uri
+        mbid:
+          type: string
+          format: uuid
+        title:
+          type: string
+        release_date:
+          type: string
+          format: date
+        creation_date:
+          type: string
+          format: date-time
+        is_local:
+          type: boolean
+        duration:
+          type: integer
+          readOnly: true
+      required:
+      - artist
+      - attributed_to
+      - cover
+      - creation_date
+      - duration
+      - fid
+      - id
+      - is_local
+      - is_playable
+      - mbid
+      - release_date
+      - tags
+      - title
+      - tracks_count
+    AlbumCreate:
+      type: object
+      properties:
+        cover:
+          type: string
+          writeOnly: true
+          nullable: true
+        title:
+          type: string
+          maxLength: 255
+        release_date:
+          type: string
+          format: date
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+          minItems: 0
+        description:
+          allOf:
+          - $ref: '#/components/schemas/Content'
+          nullable: true
+        artist:
+          type: string
+      required:
+      - artist
+      - title
+    AllowListStat:
+      type: object
+      properties:
+        enabled:
+          type: boolean
+        domains:
+          type: array
+          items:
+            type: string
+      required:
+      - domains
+      - enabled
+    Application:
+      type: object
+      properties:
+        client_id:
+          type: string
+          maxLength: 100
+        name:
+          type: string
+          maxLength: 255
+        scopes:
+          type: string
+        created:
+          type: string
+          format: date-time
+          readOnly: true
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+      required:
+      - created
+      - scopes
+      - updated
+    ArtistAlbum:
+      type: object
+      properties:
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        tracks_count:
+          type: integer
+          readOnly: true
+        is_playable:
+          type: boolean
+          readOnly: true
+        is_local:
+          type: boolean
+        id:
+          type: integer
+        fid:
+          type: string
+          format: uri
+        mbid:
+          type: string
+          format: uuid
+        title:
+          type: string
+        artist:
+          type: integer
+          readOnly: true
+        release_date:
+          type: string
+          format: date
+        creation_date:
+          type: string
+          format: date-time
+      required:
+      - artist
+      - cover
+      - creation_date
+      - fid
+      - id
+      - is_local
+      - is_playable
+      - mbid
+      - release_date
+      - title
+      - tracks_count
+    ArtistWithAlbums:
+      type: object
+      properties:
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        albums:
+          type: array
+          items:
+            $ref: '#/components/schemas/ArtistAlbum'
+        tags:
+          type: array
+          items:
+            type: string
+          readOnly: true
+        attributed_to:
+          $ref: '#/components/schemas/APIActor'
+        channel:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        tracks_count:
+          type: integer
+          readOnly: true
+        id:
+          type: integer
+        fid:
+          type: string
+          format: uri
+        mbid:
+          type: string
+          format: uuid
+        name:
+          type: string
+        content_category:
+          type: string
+        creation_date:
+          type: string
+          format: date-time
+        is_local:
+          type: boolean
+      required:
+      - albums
+      - attributed_to
+      - channel
+      - content_category
+      - cover
+      - creation_date
+      - fid
+      - id
+      - is_local
+      - mbid
+      - name
+      - tags
+      - tracks_count
+    Attachment:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        size:
+          type: integer
+          readOnly: true
+        mimetype:
+          type: string
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        file:
+          type: string
+          format: uri
+          writeOnly: true
+        urls:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+      required:
+      - creation_date
+      - file
+      - mimetype
+      - size
+      - urls
+      - uuid
+    Channel:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+        artist:
+          $ref: '#/components/schemas/SimpleArtist'
+        attributed_to:
+          $ref: '#/components/schemas/APIActor'
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+        metadata:
+          type: object
+          additionalProperties: {}
+        rss_url:
+          type: string
+        url:
+          type: string
+          format: uri
+          readOnly: true
+        downloads_count:
+          type: integer
+          readOnly: true
+      required:
+      - actor
+      - artist
+      - attributed_to
+      - downloads_count
+      - rss_url
+      - url
+    ChannelCreate:
+      type: object
+      properties:
+        cover:
+          type: string
+          writeOnly: true
+          nullable: true
+        name:
+          type: string
+          maxLength: 255
+        username:
+          type: string
+          pattern: ^[\w]+$
+          maxLength: 255
+        description:
+          allOf:
+          - $ref: '#/components/schemas/Content'
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+          minItems: 0
+        content_category:
+          $ref: '#/components/schemas/ContentCategoryEnum'
+        metadata:
+          type: object
+          additionalProperties: {}
+      required:
+      - content_category
+      - description
+      - name
+      - tags
+      - username
+    ChannelUpdate:
+      type: object
+      properties:
+        cover:
+          type: string
+          writeOnly: true
+          nullable: true
+        name:
+          type: string
+          maxLength: 255
+        description:
+          allOf:
+          - $ref: '#/components/schemas/Content'
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+          minItems: 0
+        content_category:
+          $ref: '#/components/schemas/ContentCategoryEnum'
+        metadata:
+          type: object
+          additionalProperties: {}
+      required:
+      - content_category
+      - description
+      - name
+      - tags
+    Content:
+      type: object
+      properties:
+        text:
+          type: string
+          nullable: true
+          maxLength: 5000
+        content_type:
+          $ref: '#/components/schemas/ContentTypeEnum'
+        html:
+          type: string
+          readOnly: true
+      required:
+      - content_type
+      - html
+      - text
+    ContentCategoryEnum:
+      enum:
+      - music
+      - podcast
+      - other
+      type: string
+    ContentTypeEnum:
+      enum:
+      - text/html
+      - text/markdown
+      - text/plain
+      type: string
+    CoverField:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        size:
+          type: integer
+          readOnly: true
+        mimetype:
+          type: string
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        file:
+          type: string
+          format: uri
+          writeOnly: true
+        urls:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+      required:
+      - creation_date
+      - file
+      - mimetype
+      - size
+      - urls
+      - uuid
+    CreateApplication:
+      type: object
+      properties:
+        client_id:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          maxLength: 255
+        scopes:
+          type: string
+          default: read
+        client_secret:
+          type: string
+          readOnly: true
+        created:
+          type: string
+          format: date-time
+          readOnly: true
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+        redirect_uris:
+          type: string
+          description: Allowed URIs list, space separated
+      required:
+      - client_id
+      - client_secret
+      - created
+      - name
+      - updated
+    Domain:
+      type: object
+      properties:
+        name:
+          type: string
+      required:
+      - name
+    Endpoints:
+      type: object
+      properties:
+        knownNodes:
+          type: string
+          format: uri
+        channels:
+          type: string
+          format: uri
+        libraries:
+          type: string
+          format: uri
+    FederationChoiceEnum:
+      enum:
+      - Person
+      - Tombstone
+      - Application
+      - Group
+      - Organization
+      - Service
+      type: string
+    Fetch:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        url:
+          type: string
+          format: uri
+          readOnly: true
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+        status:
+          allOf:
+          - $ref: '#/components/schemas/FetchStatusEnum'
+          readOnly: true
+        detail:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        fetch_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        object:
+          type: string
+          writeOnly: true
+        force:
+          type: boolean
+          writeOnly: true
+          default: false
+      required:
+      - actor
+      - creation_date
+      - detail
+      - fetch_date
+      - id
+      - object
+      - status
+      - url
+    FetchStatusEnum:
+      enum:
+      - pending
+      - errored
+      - finished
+      - skipped
+      type: string
+    FullActor:
+      type: object
+      properties:
+        fid:
+          type: string
+          format: uri
+        url:
+          type: string
+          format: uri
+        domain:
+          type: string
+        creation_date:
+          type: string
+          format: date-time
+        last_fetch_date:
+          type: string
+          format: date-time
+        name:
+          type: string
+        preferred_username:
+          type: string
+        full_username:
+          type: string
+        type:
+          type: string
+        is_local:
+          type: boolean
+        is_channel:
+          type: boolean
+          readOnly: true
+        manually_approves_followers:
+          type: boolean
+        user:
+          $ref: '#/components/schemas/UserBasic'
+        summary:
+          $ref: '#/components/schemas/Content'
+        icon:
+          $ref: '#/components/schemas/Attachment'
+      required:
+      - creation_date
+      - domain
+      - fid
+      - full_username
+      - icon
+      - is_channel
+      - is_local
+      - last_fetch_date
+      - manually_approves_followers
+      - name
+      - preferred_username
+      - summary
+      - type
+      - url
+      - user
+    GlobalPreference:
+      type: object
+      properties:
+        section:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          readOnly: true
+        identifier:
+          type: string
+          readOnly: true
+        default:
+          type: string
+          readOnly: true
+        value:
+          type: string
+        verbose_name:
+          type: string
+          readOnly: true
+        help_text:
+          type: string
+          readOnly: true
+        additional_data:
+          type: string
+          readOnly: true
+        field:
+          type: string
+          readOnly: true
+      required:
+      - additional_data
+      - default
+      - field
+      - help_text
+      - identifier
+      - name
+      - section
+      - value
+      - verbose_name
+    Ident:
+      type: object
+      properties:
+        type:
+          type: string
+        id:
+          type: integer
+      required:
+      - id
+      - type
+    InboxItem:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        type:
+          allOf:
+          - $ref: '#/components/schemas/InboxItemTypeEnum'
+          readOnly: true
+        activity:
+          $ref: '#/components/schemas/Activity'
+        is_read:
+          type: boolean
+      required:
+      - activity
+      - id
+      - type
+    InboxItemTypeEnum:
+      enum:
+      - to
+      - cc
+      type: string
+    Library:
+      type: object
+      properties:
+        fid:
+          type: string
+          format: uri
+          maxLength: 500
+        uuid:
+          type: string
+          format: uuid
+        actor:
+          $ref: '#/components/schemas/APIActor'
+        name:
+          type: string
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          maxLength: 5000
+        creation_date:
+          type: string
+          format: date-time
+        uploads_count:
+          type: integer
+          readOnly: true
+        privacy_level:
+          $ref: '#/components/schemas/LibraryPrivacyLevelEnum'
+        follow:
+          allOf:
+          - $ref: '#/components/schemas/NestedLibraryFollow'
+          readOnly: true
+        latest_scan:
+          allOf:
+          - $ref: '#/components/schemas/LibraryScan'
+          readOnly: true
+      required:
+      - actor
+      - fid
+      - follow
+      - latest_scan
+      - name
+      - uploads_count
+    LibraryFollow:
+      type: object
+      properties:
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        target:
+          type: string
+        approved:
+          type: boolean
+          readOnly: true
+          nullable: true
+      required:
+      - actor
+      - approved
+      - creation_date
+      - target
+      - uuid
+    LibraryForOwner:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        name:
+          type: string
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          maxLength: 5000
+        privacy_level:
+          $ref: '#/components/schemas/LibraryPrivacyLevelEnum'
+        uploads_count:
+          type: integer
+          readOnly: true
+        size:
+          type: integer
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+      required:
+      - actor
+      - creation_date
+      - fid
+      - name
+      - size
+      - uploads_count
+      - uuid
+    LibraryPrivacyLevelEnum:
+      enum:
+      - me
+      - instance
+      - everyone
+      type: string
+    LibraryScan:
+      type: object
+      properties:
+        total_files:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+        processed_files:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+        errored_files:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+        status:
+          type: string
+          maxLength: 25
+        creation_date:
+          type: string
+          format: date-time
+        modification_date:
+          type: string
+          format: date-time
+          nullable: true
+    License:
+      type: object
+      properties:
+        id:
+          type: string
+          readOnly: true
+        url:
+          type: string
+          format: uri
+        code:
+          type: string
+        name:
+          type: string
+        redistribute:
+          type: boolean
+        derivative:
+          type: boolean
+        commercial:
+          type: boolean
+        attribution:
+          type: boolean
+        copyleft:
+          type: boolean
+      required:
+      - attribution
+      - code
+      - commercial
+      - copyleft
+      - derivative
+      - id
+      - name
+      - redistribute
+      - url
+    Listening:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        user:
+          allOf:
+          - $ref: '#/components/schemas/UserBasic'
+          readOnly: true
+        track:
+          allOf:
+          - $ref: '#/components/schemas/Track'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          nullable: true
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+      required:
+      - actor
+      - id
+      - track
+      - user
+    ListeningWrite:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        user:
+          type: integer
+          nullable: true
+        track:
+          type: integer
+        creation_date:
+          type: string
+          format: date-time
+          nullable: true
+      required:
+      - id
+      - track
+    ManageActor:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        fid:
+          type: string
+          format: uri
+          maxLength: 500
+        preferred_username:
+          type: string
+          nullable: true
+          maxLength: 200
+        full_username:
+          type: string
+          readOnly: true
+        domain:
+          type: string
+        name:
+          type: string
+          nullable: true
+          maxLength: 200
+        summary:
+          type: string
+          nullable: true
+          maxLength: 500
+        type:
+          $ref: '#/components/schemas/FederationChoiceEnum'
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        last_fetch_date:
+          type: string
+          format: date-time
+        inbox_url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        outbox_url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        shared_inbox_url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        manually_approves_followers:
+          type: boolean
+          nullable: true
+        is_local:
+          type: boolean
+          readOnly: true
+        uploads_count:
+          type: integer
+          readOnly: true
+        user:
+          $ref: '#/components/schemas/ManageUser'
+        instance_policy:
+          type: integer
+          readOnly: true
+      required:
+      - creation_date
+      - domain
+      - fid
+      - full_username
+      - id
+      - instance_policy
+      - is_local
+      - preferred_username
+      - uploads_count
+      - user
+    ManageAlbum:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        title:
+          type: string
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+        release_date:
+          type: string
+          format: date
+          nullable: true
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        tracks_count:
+          type: integer
+          readOnly: true
+        artist:
+          $ref: '#/components/schemas/ManageNestedArtist'
+        attributed_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        tags:
+          type: array
+          items:
+            type: string
+          readOnly: true
+      required:
+      - artist
+      - attributed_to
+      - cover
+      - domain
+      - id
+      - is_local
+      - tags
+      - title
+      - tracks_count
+    ManageArtist:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        name:
+          type: string
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        tracks_count:
+          type: integer
+          readOnly: true
+        albums_count:
+          type: integer
+          readOnly: true
+        attributed_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        tags:
+          type: array
+          items:
+            type: string
+          readOnly: true
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        channel:
+          type: string
+          readOnly: true
+        content_category:
+          $ref: '#/components/schemas/ContentCategoryEnum'
+      required:
+      - albums_count
+      - attributed_to
+      - channel
+      - cover
+      - domain
+      - id
+      - is_local
+      - name
+      - tags
+      - tracks_count
+    ManageBaseActor:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        fid:
+          type: string
+          format: uri
+          maxLength: 500
+        preferred_username:
+          type: string
+          nullable: true
+          maxLength: 200
+        full_username:
+          type: string
+          readOnly: true
+        domain:
+          type: string
+        name:
+          type: string
+          nullable: true
+          maxLength: 200
+        summary:
+          type: string
+          nullable: true
+          maxLength: 500
+        type:
+          $ref: '#/components/schemas/FederationChoiceEnum'
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        last_fetch_date:
+          type: string
+          format: date-time
+        inbox_url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        outbox_url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        shared_inbox_url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        manually_approves_followers:
+          type: boolean
+          nullable: true
+        is_local:
+          type: boolean
+          readOnly: true
+      required:
+      - creation_date
+      - domain
+      - fid
+      - full_username
+      - id
+      - is_local
+      - preferred_username
+    ManageBaseNote:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        summary:
+          type: string
+          maxLength: 50000
+        author:
+          allOf:
+          - $ref: '#/components/schemas/ManageBaseActor'
+          readOnly: true
+      required:
+      - author
+      - creation_date
+      - id
+      - summary
+      - uuid
+    ManageChannel:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        artist:
+          $ref: '#/components/schemas/ManageArtist'
+        attributed_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        actor:
+          $ref: '#/components/schemas/ManageBaseActor'
+        rss_url:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+        metadata:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+      required:
+      - actor
+      - artist
+      - attributed_to
+      - creation_date
+      - id
+      - metadata
+      - rss_url
+      - uuid
+    ManageDomain:
+      type: object
+      properties:
+        name:
+          type: string
+          format: uri
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actors_count:
+          type: integer
+          readOnly: true
+        outbox_activities_count:
+          type: integer
+          readOnly: true
+        nodeinfo:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        nodeinfo_fetch_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        instance_policy:
+          type: integer
+          readOnly: true
+        allowed:
+          type: boolean
+          nullable: true
+      required:
+      - actors_count
+      - creation_date
+      - instance_policy
+      - name
+      - nodeinfo
+      - nodeinfo_fetch_date
+      - outbox_activities_count
+    ManageDomainUpdate:
+      type: object
+      properties:
+        name:
+          type: string
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actors_count:
+          type: integer
+          readOnly: true
+        outbox_activities_count:
+          type: integer
+          readOnly: true
+        nodeinfo:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        nodeinfo_fetch_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        instance_policy:
+          type: integer
+          readOnly: true
+        allowed:
+          type: boolean
+          nullable: true
+      required:
+      - actors_count
+      - creation_date
+      - instance_policy
+      - name
+      - nodeinfo
+      - nodeinfo_fetch_date
+      - outbox_activities_count
+    ManageInstancePolicy:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        target:
+          $ref: '#/components/schemas/ManageTarget'
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actor:
+          type: string
+          format: email
+          readOnly: true
+        summary:
+          type: string
+          nullable: true
+          maxLength: 10000
+        is_active:
+          type: boolean
+        block_all:
+          type: boolean
+        silence_activity:
+          type: boolean
+        silence_notifications:
+          type: boolean
+        reject_media:
+          type: boolean
+      required:
+      - actor
+      - creation_date
+      - id
+      - target
+      - uuid
+    ManageInvitation:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        owner:
+          $ref: '#/components/schemas/ManageUserSimple'
+        code:
+          type: string
+          nullable: true
+        expiration_date:
+          type: string
+          format: date-time
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        users:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageUserSimple'
+      required:
+      - creation_date
+      - expiration_date
+      - id
+    ManageLibrary:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        url:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+        name:
+          type: string
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          maxLength: 5000
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        privacy_level:
+          $ref: '#/components/schemas/LibraryPrivacyLevelEnum'
+        uploads_count:
+          type: integer
+          readOnly: true
+        followers_count:
+          type: integer
+          readOnly: true
+        followers_url:
+          type: string
+          format: uri
+          maxLength: 500
+        actor:
+          $ref: '#/components/schemas/ManageBaseActor'
+      required:
+      - actor
+      - creation_date
+      - domain
+      - fid
+      - followers_count
+      - followers_url
+      - id
+      - is_local
+      - name
+      - uploads_count
+      - url
+      - uuid
+    ManageNestedArtist:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        name:
+          type: string
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+      required:
+      - domain
+      - id
+      - is_local
+      - name
+    ManageNestedLibrary:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+        fid:
+          type: string
+          format: uri
+          maxLength: 500
+        url:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        name:
+          type: string
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          maxLength: 5000
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+        privacy_level:
+          $ref: '#/components/schemas/LibraryPrivacyLevelEnum'
+        followers_url:
+          type: string
+          format: uri
+          maxLength: 500
+        actor:
+          $ref: '#/components/schemas/ManageBaseActor'
+      required:
+      - actor
+      - domain
+      - fid
+      - followers_url
+      - id
+      - is_local
+      - name
+    ManageNestedTrack:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        title:
+          type: string
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+        position:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+          nullable: true
+        disc_number:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+          nullable: true
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        copyright:
+          type: string
+          nullable: true
+          maxLength: 500
+        license:
+          type: string
+          nullable: true
+      required:
+      - domain
+      - id
+      - is_local
+      - title
+    ManageNote:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        summary:
+          type: string
+          maxLength: 50000
+        author:
+          allOf:
+          - $ref: '#/components/schemas/ManageBaseActor'
+          readOnly: true
+        target:
+          type: object
+          additionalProperties: {}
+      required:
+      - author
+      - creation_date
+      - id
+      - summary
+      - target
+      - uuid
+    ManageReport:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        handled_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        summary:
+          type: string
+          readOnly: true
+          nullable: true
+        type:
+          $ref: '#/components/schemas/ReportTypeEnum'
+        target:
+          type: object
+          additionalProperties: {}
+        target_state:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+          nullable: true
+        is_handled:
+          type: boolean
+        assigned_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        target_owner:
+          $ref: '#/components/schemas/ManageBaseActor'
+        submitter:
+          $ref: '#/components/schemas/ManageBaseActor'
+        submitter_email:
+          type: string
+          format: email
+          readOnly: true
+          nullable: true
+        notes:
+          allOf:
+          - $ref: '#/components/schemas/ManageBaseNote'
+          readOnly: true
+      required:
+      - assigned_to
+      - creation_date
+      - fid
+      - handled_date
+      - id
+      - notes
+      - submitter
+      - submitter_email
+      - summary
+      - target
+      - target_owner
+      - target_state
+      - type
+      - uuid
+    ManageTag:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        name:
+          type: string
+          maxLength: 100
+        creation_date:
+          type: string
+          format: date-time
+        tracks_count:
+          type: integer
+          readOnly: true
+        albums_count:
+          type: integer
+          readOnly: true
+        artists_count:
+          type: integer
+          readOnly: true
+      required:
+      - albums_count
+      - artists_count
+      - id
+      - name
+      - tracks_count
+    ManageTarget:
+      type: object
+      properties:
+        type:
+          $ref: '#/components/schemas/ManageTargetTypeEnum'
+        id:
+          type: string
+      required:
+      - id
+      - type
+    ManageTargetTypeEnum:
+      enum:
+      - domain
+      - actor
+      type: string
+    ManageTrack:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        title:
+          type: string
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+        position:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+          nullable: true
+        disc_number:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+          nullable: true
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        copyright:
+          type: string
+          nullable: true
+          maxLength: 500
+        license:
+          type: string
+          nullable: true
+        artist:
+          $ref: '#/components/schemas/ManageNestedArtist'
+        album:
+          $ref: '#/components/schemas/ManageTrackAlbum'
+        attributed_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        uploads_count:
+          type: integer
+          readOnly: true
+        tags:
+          type: array
+          items:
+            type: string
+          readOnly: true
+        cover:
+          $ref: '#/components/schemas/CoverField'
+      required:
+      - album
+      - artist
+      - attributed_to
+      - cover
+      - domain
+      - id
+      - is_local
+      - tags
+      - title
+      - uploads_count
+    ManageTrackAlbum:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        title:
+          type: string
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+        release_date:
+          type: string
+          format: date
+          nullable: true
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        tracks_count:
+          type: integer
+          readOnly: true
+        artist:
+          $ref: '#/components/schemas/ManageNestedArtist'
+      required:
+      - artist
+      - cover
+      - domain
+      - id
+      - is_local
+      - title
+      - tracks_count
+    ManageUpload:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        audio_file:
+          type: string
+          format: uri
+        listen_url:
+          type: string
+          readOnly: true
+        source:
+          type: string
+          nullable: true
+          maxLength: 500
+        filename:
+          type: string
+          readOnly: true
+        mimetype:
+          type: string
+          nullable: true
+          maxLength: 200
+        duration:
+          type: integer
+          maximum: 2147483647
+          minimum: -2147483648
+          nullable: true
+        bitrate:
+          type: integer
+          maximum: 2147483647
+          minimum: -2147483648
+          nullable: true
+        size:
+          type: integer
+          maximum: 2147483647
+          minimum: -2147483648
+          nullable: true
+        creation_date:
+          type: string
+          format: date-time
+        accessed_date:
+          type: string
+          format: date-time
+          nullable: true
+        modification_date:
+          type: string
+          format: date-time
+          nullable: true
+        metadata:
+          type: object
+          additionalProperties: {}
+        import_date:
+          type: string
+          format: date-time
+          nullable: true
+        import_details:
+          type: object
+          additionalProperties: {}
+        import_status:
+          $ref: '#/components/schemas/ManageUploadImportStatusEnum'
+        import_metadata:
+          type: object
+          additionalProperties: {}
+        import_reference:
+          type: string
+          maxLength: 50
+        track:
+          $ref: '#/components/schemas/ManageNestedTrack'
+        library:
+          $ref: '#/components/schemas/ManageNestedLibrary'
+      required:
+      - audio_file
+      - domain
+      - filename
+      - id
+      - is_local
+      - library
+      - listen_url
+      - track
+    ManageUploadImportStatusEnum:
+      enum:
+      - draft
+      - pending
+      - finished
+      - errored
+      - skipped
+      type: string
+    ManageUser:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        username:
+          type: string
+          readOnly: true
+          description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+            only.
+        actor:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        email:
+          type: string
+          format: email
+          readOnly: true
+          title: Email address
+        name:
+          type: string
+          title: Name of User
+          maxLength: 255
+        is_active:
+          type: boolean
+          title: Active
+          description: Designates whether this user should be treated as active. Unselect
+            this instead of deleting accounts.
+        is_staff:
+          type: boolean
+          title: Staff status
+          description: Designates whether the user can log into this admin site.
+        is_superuser:
+          type: boolean
+          title: Superuser status
+          description: Designates that this user has all permissions without explicitly
+            assigning them.
+        date_joined:
+          type: string
+          format: date-time
+          readOnly: true
+        last_activity:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        privacy_level:
+          allOf:
+          - $ref: '#/components/schemas/PrivacyLevelEnum'
+          readOnly: true
+        upload_quota:
+          type: integer
+          nullable: true
+        full_username:
+          type: string
+          readOnly: true
+      required:
+      - actor
+      - date_joined
+      - email
+      - full_username
+      - id
+      - last_activity
+      - privacy_level
+      - upload_quota
+      - username
+    ManageUserRequest:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        handled_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        type:
+          $ref: '#/components/schemas/ManageUserRequestTypeEnum'
+        status:
+          $ref: '#/components/schemas/ManageUserRequestStatusEnum'
+        assigned_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        submitter:
+          $ref: '#/components/schemas/ManageBaseActor'
+        notes:
+          allOf:
+          - $ref: '#/components/schemas/ManageBaseNote'
+          readOnly: true
+        metadata:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+          nullable: true
+      required:
+      - assigned_to
+      - creation_date
+      - handled_date
+      - id
+      - metadata
+      - notes
+      - submitter
+      - type
+      - uuid
+    ManageUserRequestStatusEnum:
+      enum:
+      - pending
+      - refused
+      - approved
+      type: string
+    ManageUserRequestTypeEnum:
+      enum:
+      - signup
+      type: string
+    ManageUserSimple:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        username:
+          type: string
+          description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+            only.
+          pattern: ^[\w.@+-]+$
+          maxLength: 150
+        email:
+          type: string
+          format: email
+          title: Email address
+          maxLength: 254
+        name:
+          type: string
+          title: Name of User
+          maxLength: 255
+        is_active:
+          type: boolean
+          title: Active
+          description: Designates whether this user should be treated as active. Unselect
+            this instead of deleting accounts.
+        is_staff:
+          type: boolean
+          title: Staff status
+          description: Designates whether the user can log into this admin site.
+        is_superuser:
+          type: boolean
+          title: Superuser status
+          description: Designates that this user has all permissions without explicitly
+            assigning them.
+        date_joined:
+          type: string
+          format: date-time
+        last_activity:
+          type: string
+          format: date-time
+          nullable: true
+        privacy_level:
+          $ref: '#/components/schemas/PrivacyLevelEnum'
+        upload_quota:
+          type: integer
+          maximum: 2147483647
+          minimum: 0
+          nullable: true
+      required:
+      - id
+      - username
+    Metadata:
+      type: object
+      properties:
+        actorId:
+          type: string
+        private:
+          type: boolean
+          readOnly: true
+        shortDescription:
+          type: string
+          readOnly: true
+        longDescription:
+          type: string
+          readOnly: true
+        rules:
+          type: string
+          readOnly: true
+        contactEmail:
+          type: string
+          readOnly: true
+        terms:
+          type: string
+          readOnly: true
+        nodeName:
+          type: string
+          readOnly: true
+        banner:
+          type: string
+          readOnly: true
+        defaultUploadQuota:
+          type: integer
+          readOnly: true
+        library:
+          type: boolean
+          readOnly: true
+        supportedUploadExtensions:
+          type: array
+          items:
+            type: string
+        allowList:
+          allOf:
+          - $ref: '#/components/schemas/AllowListStat'
+          readOnly: true
+        reportTypes:
+          type: array
+          items:
+            $ref: '#/components/schemas/ReportType'
+        funkwhaleSupportMessageEnabled:
+          type: boolean
+          readOnly: true
+        instanceSupportMessage:
+          type: string
+          readOnly: true
+        endpoints:
+          $ref: '#/components/schemas/Endpoints'
+        usage:
+          allOf:
+          - $ref: '#/components/schemas/MetadataUsage'
+          readOnly: true
+      required:
+      - actorId
+      - allowList
+      - banner
+      - contactEmail
+      - defaultUploadQuota
+      - endpoints
+      - funkwhaleSupportMessageEnabled
+      - instanceSupportMessage
+      - library
+      - longDescription
+      - nodeName
+      - private
+      - reportTypes
+      - rules
+      - shortDescription
+      - supportedUploadExtensions
+      - terms
+      - usage
+    MetadataUsage:
+      type: object
+      properties:
+        favorites:
+          $ref: '#/components/schemas/MetadataUsageFavorite'
+        listenings:
+          $ref: '#/components/schemas/TotalCount'
+        downloads:
+          $ref: '#/components/schemas/TotalCount'
+      required:
+      - downloads
+      - favorites
+      - listenings
+    MetadataUsageFavorite:
+      type: object
+      properties:
+        tracks:
+          allOf:
+          - $ref: '#/components/schemas/TotalCount'
+          readOnly: true
+      required:
+      - tracks
+    ModerationTarget:
+      type: object
+      properties:
+        type:
+          $ref: '#/components/schemas/ModerationTargetTypeEnum'
+        id:
+          type: string
+      required:
+      - id
+      - type
+    ModerationTargetTypeEnum:
+      enum:
+      - artist
+      type: string
+    NestedLibraryFollow:
+      type: object
+      properties:
+        creation_date:
+          type: string
+          format: date-time
+        uuid:
+          type: string
+          format: uuid
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        approved:
+          type: boolean
+          nullable: true
+        modification_date:
+          type: string
+          format: date-time
+          readOnly: true
+      required:
+      - modification_date
+    NodeInfo20:
+      type: object
+      properties:
+        version:
+          type: string
+          readOnly: true
+        software:
+          $ref: '#/components/schemas/Software'
+        protocols:
+          type: array
+          items: {}
+          readOnly: true
+        services:
+          allOf:
+          - $ref: '#/components/schemas/Services'
+          default:
+            inbound: []
+            outbound: []
+        openRegistrations:
+          type: boolean
+          readOnly: true
+        usage:
+          allOf:
+          - $ref: '#/components/schemas/Usage'
+          readOnly: true
+        metadata:
+          allOf:
+          - $ref: '#/components/schemas/Metadata'
+          readOnly: true
+      required:
+      - metadata
+      - openRegistrations
+      - protocols
+      - software
+      - usage
+      - version
+    PaginatedAPIMutationList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/APIMutation'
+    PaginatedAlbumList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Album'
+    PaginatedApplicationList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Application'
+    PaginatedArtistWithAlbumsList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ArtistWithAlbums'
+    PaginatedChannelList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Channel'
+    PaginatedDomainList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Domain'
+    PaginatedInboxItemList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/InboxItem'
+    PaginatedLibraryFollowList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/LibraryFollow'
+    PaginatedLibraryForOwnerList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/LibraryForOwner'
+    PaginatedLicenseList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/License'
+    PaginatedListeningList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Listening'
+    PaginatedManageActorList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageActor'
+    PaginatedManageAlbumList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageAlbum'
+    PaginatedManageArtistList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageArtist'
+    PaginatedManageChannelList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageChannel'
+    PaginatedManageDomainList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageDomain'
+    PaginatedManageInstancePolicyList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageInstancePolicy'
+    PaginatedManageInvitationList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageInvitation'
+    PaginatedManageLibraryList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageLibrary'
+    PaginatedManageNoteList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageNote'
+    PaginatedManageReportList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageReport'
+    PaginatedManageTagList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageTag'
+    PaginatedManageTrackList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageTrack'
+    PaginatedManageUploadList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageUpload'
+    PaginatedManageUserList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageUser'
+    PaginatedManageUserRequestList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageUserRequest'
+    PaginatedPlaylistList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Playlist'
+    PaginatedRadioList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Radio'
+    PaginatedSubscriptionList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Subscription'
+    PaginatedTagList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Tag'
+    PaginatedTrackList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/Track'
+    PaginatedUploadForOwnerList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/UploadForOwner'
+    PaginatedUserFilterList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/UserFilter'
+    PaginatedUserTrackFavoriteList:
+      type: object
+      properties:
+        count:
+          type: integer
+          example: 123
+        next:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=4
+        previous:
+          type: string
+          nullable: true
+          format: uri
+          example: http://api.example.org/accounts/?page=2
+        results:
+          type: array
+          items:
+            $ref: '#/components/schemas/UserTrackFavorite'
+    PasswordChange:
+      type: object
+      properties:
+        old_password:
+          type: string
+          maxLength: 128
+        new_password1:
+          type: string
+          maxLength: 128
+        new_password2:
+          type: string
+          maxLength: 128
+      required:
+      - new_password1
+      - new_password2
+      - old_password
+    PasswordReset:
+      type: object
+      description: Serializer for requesting a password reset e-mail.
+      properties:
+        email:
+          type: string
+          format: email
+      required:
+      - email
+    PasswordResetConfirm:
+      type: object
+      description: Serializer for requesting a password reset e-mail.
+      properties:
+        new_password1:
+          type: string
+          maxLength: 128
+        new_password2:
+          type: string
+          maxLength: 128
+        uid:
+          type: string
+        token:
+          type: string
+      required:
+      - new_password1
+      - new_password2
+      - token
+      - uid
+    PatchedApplication:
+      type: object
+      properties:
+        client_id:
+          type: string
+          maxLength: 100
+        name:
+          type: string
+          maxLength: 255
+        scopes:
+          type: string
+        created:
+          type: string
+          format: date-time
+          readOnly: true
+        updated:
+          type: string
+          format: date-time
+          readOnly: true
+    PatchedChannelUpdate:
+      type: object
+      properties:
+        cover:
+          type: string
+          writeOnly: true
+          nullable: true
+        name:
+          type: string
+          maxLength: 255
+        description:
+          allOf:
+          - $ref: '#/components/schemas/Content'
+          nullable: true
+        tags:
+          type: array
+          items:
+            type: string
+          minItems: 0
+        content_category:
+          $ref: '#/components/schemas/ContentCategoryEnum'
+        metadata:
+          type: object
+          additionalProperties: {}
+    PatchedGlobalPreference:
+      type: object
+      properties:
+        section:
+          type: string
+          readOnly: true
+        name:
+          type: string
+          readOnly: true
+        identifier:
+          type: string
+          readOnly: true
+        default:
+          type: string
+          readOnly: true
+        value:
+          type: string
+        verbose_name:
+          type: string
+          readOnly: true
+        help_text:
+          type: string
+          readOnly: true
+        additional_data:
+          type: string
+          readOnly: true
+        field:
+          type: string
+          readOnly: true
+    PatchedInboxItem:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        type:
+          allOf:
+          - $ref: '#/components/schemas/InboxItemTypeEnum'
+          readOnly: true
+        activity:
+          $ref: '#/components/schemas/Activity'
+        is_read:
+          type: boolean
+    PatchedLibraryForOwner:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        name:
+          type: string
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          maxLength: 5000
+        privacy_level:
+          $ref: '#/components/schemas/LibraryPrivacyLevelEnum'
+        uploads_count:
+          type: integer
+          readOnly: true
+        size:
+          type: integer
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+    PatchedManageDomainUpdate:
+      type: object
+      properties:
+        name:
+          type: string
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actors_count:
+          type: integer
+          readOnly: true
+        outbox_activities_count:
+          type: integer
+          readOnly: true
+        nodeinfo:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        nodeinfo_fetch_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        instance_policy:
+          type: integer
+          readOnly: true
+        allowed:
+          type: boolean
+          nullable: true
+    PatchedManageInstancePolicy:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        target:
+          $ref: '#/components/schemas/ManageTarget'
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        actor:
+          type: string
+          format: email
+          readOnly: true
+        summary:
+          type: string
+          nullable: true
+          maxLength: 10000
+        is_active:
+          type: boolean
+        block_all:
+          type: boolean
+        silence_activity:
+          type: boolean
+        silence_notifications:
+          type: boolean
+        reject_media:
+          type: boolean
+    PatchedManageInvitation:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        owner:
+          $ref: '#/components/schemas/ManageUserSimple'
+        code:
+          type: string
+          nullable: true
+        expiration_date:
+          type: string
+          format: date-time
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        users:
+          type: array
+          items:
+            $ref: '#/components/schemas/ManageUserSimple'
+    PatchedManageLibrary:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        url:
+          type: string
+          format: uri
+          readOnly: true
+          nullable: true
+        name:
+          type: string
+          maxLength: 100
+        description:
+          type: string
+          nullable: true
+          maxLength: 5000
+        domain:
+          type: string
+        is_local:
+          type: boolean
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        privacy_level:
+          $ref: '#/components/schemas/LibraryPrivacyLevelEnum'
+        uploads_count:
+          type: integer
+          readOnly: true
+        followers_count:
+          type: integer
+          readOnly: true
+        followers_url:
+          type: string
+          format: uri
+          maxLength: 500
+        actor:
+          $ref: '#/components/schemas/ManageBaseActor'
+    PatchedManageReport:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        handled_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        summary:
+          type: string
+          readOnly: true
+          nullable: true
+        type:
+          $ref: '#/components/schemas/ReportTypeEnum'
+        target:
+          type: object
+          additionalProperties: {}
+        target_state:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+          nullable: true
+        is_handled:
+          type: boolean
+        assigned_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        target_owner:
+          $ref: '#/components/schemas/ManageBaseActor'
+        submitter:
+          $ref: '#/components/schemas/ManageBaseActor'
+        submitter_email:
+          type: string
+          format: email
+          readOnly: true
+          nullable: true
+        notes:
+          allOf:
+          - $ref: '#/components/schemas/ManageBaseNote'
+          readOnly: true
+    PatchedManageUser:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        username:
+          type: string
+          readOnly: true
+          description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+            only.
+        actor:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        email:
+          type: string
+          format: email
+          readOnly: true
+          title: Email address
+        name:
+          type: string
+          title: Name of User
+          maxLength: 255
+        is_active:
+          type: boolean
+          title: Active
+          description: Designates whether this user should be treated as active. Unselect
+            this instead of deleting accounts.
+        is_staff:
+          type: boolean
+          title: Staff status
+          description: Designates whether the user can log into this admin site.
+        is_superuser:
+          type: boolean
+          title: Superuser status
+          description: Designates that this user has all permissions without explicitly
+            assigning them.
+        date_joined:
+          type: string
+          format: date-time
+          readOnly: true
+        last_activity:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        privacy_level:
+          allOf:
+          - $ref: '#/components/schemas/PrivacyLevelEnum'
+          readOnly: true
+        upload_quota:
+          type: integer
+          nullable: true
+        full_username:
+          type: string
+          readOnly: true
+    PatchedManageUserRequest:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        handled_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        type:
+          $ref: '#/components/schemas/ManageUserRequestTypeEnum'
+        status:
+          $ref: '#/components/schemas/ManageUserRequestStatusEnum'
+        assigned_to:
+          $ref: '#/components/schemas/ManageBaseActor'
+        submitter:
+          $ref: '#/components/schemas/ManageBaseActor'
+        notes:
+          allOf:
+          - $ref: '#/components/schemas/ManageBaseNote'
+          readOnly: true
+        metadata:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+          nullable: true
+    PatchedPlaylist:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        name:
+          type: string
+          maxLength: 50
+        user:
+          allOf:
+          - $ref: '#/components/schemas/UserBasic'
+          readOnly: true
+        modification_date:
+          type: string
+          format: date-time
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        privacy_level:
+          $ref: '#/components/schemas/PrivacyLevelEnum'
+        tracks_count:
+          type: integer
+          readOnly: true
+        album_covers:
+          type: array
+          items:
+            type: uri
+          readOnly: true
+        duration:
+          type: integer
+          readOnly: true
+        is_playable:
+          type: boolean
+          readOnly: true
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+    PatchedRadio:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        is_public:
+          type: boolean
+        name:
+          type: string
+          maxLength: 100
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        user:
+          allOf:
+          - $ref: '#/components/schemas/UserBasic'
+          readOnly: true
+        config:
+          type: object
+          additionalProperties: {}
+        description:
+          type: string
+    PatchedUploadForOwner:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        filename:
+          type: string
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        mimetype:
+          type: string
+          readOnly: true
+          nullable: true
+        track:
+          allOf:
+          - $ref: '#/components/schemas/Track'
+          nullable: true
+        library:
+          type: string
+        channel:
+          type: string
+        duration:
+          type: integer
+          readOnly: true
+          nullable: true
+        bitrate:
+          type: integer
+          readOnly: true
+          nullable: true
+        size:
+          type: integer
+          readOnly: true
+          nullable: true
+        import_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        import_status:
+          allOf:
+          - $ref: '#/components/schemas/UploadForOwnerImportStatusEnum'
+          default: pending
+        import_details:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        import_metadata:
+          type: object
+          additionalProperties: {}
+        import_reference:
+          type: string
+          maxLength: 50
+        metadata:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        source:
+          type: string
+          nullable: true
+          maxLength: 500
+        audio_file:
+          type: string
+          format: uri
+    PatchedUserDetails:
+      type: object
+      description: User model w/o password
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+            only.
+          pattern: ^[\w.@+-]+$
+          maxLength: 150
+        email:
+          type: string
+          format: email
+          readOnly: true
+          title: Email address
+        first_name:
+          type: string
+          maxLength: 150
+        last_name:
+          type: string
+          maxLength: 150
+    PatchedUserWrite:
+      type: object
+      properties:
+        name:
+          type: string
+          title: Name of User
+          maxLength: 255
+        privacy_level:
+          $ref: '#/components/schemas/PrivacyLevelEnum'
+        avatar:
+          type: string
+          writeOnly: true
+        instance_support_message_display_date:
+          type: string
+          format: date-time
+          nullable: true
+        funkwhale_support_message_display_date:
+          type: string
+          format: date-time
+          nullable: true
+        summary:
+          allOf:
+          - $ref: '#/components/schemas/Content'
+          nullable: true
+    Playlist:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        name:
+          type: string
+          maxLength: 50
+        user:
+          allOf:
+          - $ref: '#/components/schemas/UserBasic'
+          readOnly: true
+        modification_date:
+          type: string
+          format: date-time
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        privacy_level:
+          $ref: '#/components/schemas/PrivacyLevelEnum'
+        tracks_count:
+          type: integer
+          readOnly: true
+        album_covers:
+          type: array
+          items:
+            type: uri
+          readOnly: true
+        duration:
+          type: integer
+          readOnly: true
+        is_playable:
+          type: boolean
+          readOnly: true
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+      required:
+      - actor
+      - album_covers
+      - creation_date
+      - duration
+      - id
+      - is_playable
+      - modification_date
+      - name
+      - tracks_count
+      - user
+    PrivacyLevelEnum:
+      enum:
+      - me
+      - followers
+      - instance
+      - everyone
+      type: string
+    Radio:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        is_public:
+          type: boolean
+        name:
+          type: string
+          maxLength: 100
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        user:
+          allOf:
+          - $ref: '#/components/schemas/UserBasic'
+          readOnly: true
+        config:
+          type: object
+          additionalProperties: {}
+        description:
+          type: string
+      required:
+      - config
+      - creation_date
+      - id
+      - name
+      - user
+    RadioSession:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        radio_type:
+          type: string
+          maxLength: 50
+        related_object_id:
+          type: string
+          nullable: true
+        user:
+          type: integer
+          nullable: true
+        creation_date:
+          type: string
+          format: date-time
+        custom_radio:
+          type: integer
+          nullable: true
+        config:
+          type: object
+          additionalProperties: {}
+          nullable: true
+      required:
+      - id
+      - radio_type
+    RadioSessionTrackSerializerCreate:
+      type: object
+      properties:
+        session:
+          type: integer
+      required:
+      - session
+    RateLimit:
+      type: object
+      properties:
+        enabled:
+          type: boolean
+        ident:
+          $ref: '#/components/schemas/Ident'
+        scopes:
+          type: array
+          items:
+            $ref: '#/components/schemas/Scopes'
+      required:
+      - enabled
+      - ident
+      - scopes
+    Register:
+      type: object
+      properties:
+        username:
+          type: string
+          maxLength: 150
+          minLength: 1
+        email:
+          type: string
+          format: email
+        password1:
+          type: string
+          writeOnly: true
+        password2:
+          type: string
+          writeOnly: true
+        invitation:
+          type: string
+          nullable: true
+      required:
+      - email
+      - password1
+      - password2
+      - username
+    Report:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        summary:
+          type: string
+          nullable: true
+          maxLength: 50000
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        handled_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        is_handled:
+          type: boolean
+          readOnly: true
+        submitter_email:
+          type: string
+          format: email
+          nullable: true
+          maxLength: 254
+        target:
+          type: object
+          additionalProperties: {}
+        type:
+          $ref: '#/components/schemas/ReportTypeEnum'
+      required:
+      - creation_date
+      - handled_date
+      - is_handled
+      - target
+      - type
+      - uuid
+    ReportType:
+      type: object
+      properties:
+        type:
+          type: string
+        label:
+          type: string
+        anonymous:
+          type: boolean
+      required:
+      - anonymous
+      - label
+      - type
+    ReportTypeEnum:
+      enum:
+      - takedown_request
+      - invalid_metadata
+      - illegal_content
+      - offensive_content
+      - other
+      type: string
+    Scopes:
+      type: object
+      properties:
+        id:
+          type: string
+        rate:
+          type: string
+        description:
+          type: string
+        limit:
+          type: integer
+        duration:
+          type: integer
+        remaining:
+          type: integer
+        available:
+          type: integer
+        available_seconds:
+          type: integer
+        reset:
+          type: integer
+        reset_seconds:
+          type: integer
+      required:
+      - available
+      - available_seconds
+      - description
+      - duration
+      - id
+      - limit
+      - rate
+      - remaining
+      - reset
+      - reset_seconds
+    Services:
+      type: object
+      properties:
+        inbound:
+          type: array
+          items:
+            type: string
+          default: []
+        outbound:
+          type: array
+          items:
+            type: string
+          default: []
+    SimpleArtist:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        name:
+          type: string
+          maxLength: 255
+        creation_date:
+          type: string
+          format: date-time
+        modification_date:
+          type: string
+          format: date-time
+        is_local:
+          type: boolean
+          readOnly: true
+        content_category:
+          $ref: '#/components/schemas/ContentCategoryEnum'
+        description:
+          $ref: '#/components/schemas/Content'
+        attachment_cover:
+          $ref: '#/components/schemas/CoverField'
+        channel:
+          type: integer
+      required:
+      - attachment_cover
+      - channel
+      - description
+      - id
+      - is_local
+      - name
+    Software:
+      type: object
+      properties:
+        name:
+          type: string
+          readOnly: true
+        version:
+          type: string
+      required:
+      - name
+      - version
+    Subscription:
+      type: object
+      properties:
+        approved:
+          type: boolean
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          readOnly: true
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+      required:
+      - approved
+      - creation_date
+      - fid
+      - uuid
+    Tag:
+      type: object
+      properties:
+        name:
+          type: string
+          maxLength: 100
+        creation_date:
+          type: string
+          format: date-time
+      required:
+      - name
+    TotalCount:
+      type: object
+      properties:
+        total:
+          type: integer
+          readOnly: true
+      required:
+      - total
+    Track:
+      type: object
+      properties:
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        artist:
+          $ref: '#/components/schemas/SimpleArtist'
+        album:
+          allOf:
+          - $ref: '#/components/schemas/TrackAlbum'
+          readOnly: true
+        uploads:
+          type: array
+          items:
+            type: object
+          readOnly: true
+        listen_url:
+          type: string
+          format: uri
+          readOnly: true
+        tags:
+          type: array
+          items:
+            type: str
+          readOnly: true
+        attributed_to:
+          $ref: '#/components/schemas/APIActor'
+        id:
+          type: integer
+        fid:
+          type: string
+          format: uri
+        mbid:
+          type: string
+          format: uuid
+        title:
+          type: string
+        creation_date:
+          type: string
+          format: date-time
+        is_local:
+          type: boolean
+        position:
+          type: integer
+        disc_number:
+          type: integer
+        downloads_count:
+          type: integer
+        copyright:
+          type: string
+        license:
+          type: string
+          readOnly: true
+        is_playable:
+          type: boolean
+          readOnly: true
+      required:
+      - album
+      - artist
+      - attributed_to
+      - copyright
+      - cover
+      - creation_date
+      - disc_number
+      - downloads_count
+      - fid
+      - id
+      - is_local
+      - is_playable
+      - license
+      - listen_url
+      - mbid
+      - position
+      - tags
+      - title
+      - uploads
+    TrackAlbum:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        fid:
+          type: string
+          format: uri
+          nullable: true
+          maxLength: 500
+        mbid:
+          type: string
+          format: uuid
+          nullable: true
+        title:
+          type: string
+          maxLength: 255
+        artist:
+          $ref: '#/components/schemas/SimpleArtist'
+        release_date:
+          type: string
+          format: date
+          nullable: true
+        cover:
+          $ref: '#/components/schemas/CoverField'
+        creation_date:
+          type: string
+          format: date-time
+        is_local:
+          type: boolean
+          readOnly: true
+        tracks_count:
+          type: integer
+          readOnly: true
+      required:
+      - artist
+      - cover
+      - id
+      - is_local
+      - title
+      - tracks_count
+    UploadForOwner:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        filename:
+          type: string
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+        mimetype:
+          type: string
+          readOnly: true
+          nullable: true
+        track:
+          allOf:
+          - $ref: '#/components/schemas/Track'
+          nullable: true
+        library:
+          type: string
+        channel:
+          type: string
+        duration:
+          type: integer
+          readOnly: true
+          nullable: true
+        bitrate:
+          type: integer
+          readOnly: true
+          nullable: true
+        size:
+          type: integer
+          readOnly: true
+          nullable: true
+        import_date:
+          type: string
+          format: date-time
+          readOnly: true
+          nullable: true
+        import_status:
+          allOf:
+          - $ref: '#/components/schemas/UploadForOwnerImportStatusEnum'
+          default: pending
+        import_details:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        import_metadata:
+          type: object
+          additionalProperties: {}
+        import_reference:
+          type: string
+          maxLength: 50
+        metadata:
+          type: object
+          additionalProperties: {}
+          readOnly: true
+        source:
+          type: string
+          nullable: true
+          maxLength: 500
+        audio_file:
+          type: string
+          format: uri
+      required:
+      - audio_file
+      - bitrate
+      - creation_date
+      - duration
+      - filename
+      - import_date
+      - import_details
+      - metadata
+      - mimetype
+      - size
+      - uuid
+    UploadForOwnerImportStatusEnum:
+      enum:
+      - draft
+      - pending
+      type: string
+    Usage:
+      type: object
+      properties:
+        users:
+          $ref: '#/components/schemas/UsersUsage'
+      required:
+      - users
+    UserBasic:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        username:
+          type: string
+          description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+            only.
+          pattern: ^[\w.@+-]+$
+          maxLength: 150
+        name:
+          type: string
+          title: Name of User
+          maxLength: 255
+        date_joined:
+          type: string
+          format: date-time
+        avatar:
+          $ref: '#/components/schemas/Attachment'
+      required:
+      - avatar
+      - id
+      - username
+    UserDetails:
+      type: object
+      description: User model w/o password
+      properties:
+        pk:
+          type: integer
+          readOnly: true
+          title: ID
+        username:
+          type: string
+          description: Required. 150 characters or fewer. Letters, digits and @/./+/-/_
+            only.
+          pattern: ^[\w.@+-]+$
+          maxLength: 150
+        email:
+          type: string
+          format: email
+          readOnly: true
+          title: Email address
+        first_name:
+          type: string
+          maxLength: 150
+        last_name:
+          type: string
+          maxLength: 150
+      required:
+      - email
+      - pk
+      - username
+    UserFilter:
+      type: object
+      properties:
+        uuid:
+          type: string
+          format: uuid
+          readOnly: true
+        target:
+          $ref: '#/components/schemas/ModerationTarget'
+        creation_date:
+          type: string
+          format: date-time
+          readOnly: true
+      required:
+      - creation_date
+      - target
+      - uuid
+    UserTrackFavorite:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        user:
+          allOf:
+          - $ref: '#/components/schemas/UserBasic'
+          readOnly: true
+        track:
+          allOf:
+          - $ref: '#/components/schemas/Track'
+          readOnly: true
+        creation_date:
+          type: string
+          format: date-time
+        actor:
+          allOf:
+          - $ref: '#/components/schemas/APIActor'
+          readOnly: true
+      required:
+      - actor
+      - id
+      - track
+      - user
+    UserTrackFavoriteWrite:
+      type: object
+      properties:
+        id:
+          type: integer
+          readOnly: true
+        track:
+          type: integer
+        creation_date:
+          type: string
+          format: date-time
+      required:
+      - id
+      - track
+    UserWrite:
+      type: object
+      properties:
+        name:
+          type: string
+          title: Name of User
+          maxLength: 255
+        privacy_level:
+          $ref: '#/components/schemas/PrivacyLevelEnum'
+        avatar:
+          type: string
+          writeOnly: true
+        instance_support_message_display_date:
+          type: string
+          format: date-time
+          nullable: true
+        funkwhale_support_message_display_date:
+          type: string
+          format: date-time
+          nullable: true
+        summary:
+          allOf:
+          - $ref: '#/components/schemas/Content'
+          nullable: true
+      required:
+      - avatar
+    UsersUsage:
+      type: object
+      properties:
+        total:
+          type: integer
+        activeHalfyear:
+          type: integer
+          readOnly: true
+        activeMonth:
+          type: integer
+          readOnly: true
+      required:
+      - activeHalfyear
+      - activeMonth
+      - total
+    VerifyEmail:
+      type: object
+      properties:
+        key:
+          type: string
+      required:
+      - key
+  securitySchemes:
+    ApplicationToken:
+      type: http
+      scheme: bearer
+    oauth2:
+      type: oauth2
+      flows:
+        authorizationCode:
+          authorizationUrl: /authorize
+          tokenUrl: /api/v1/oauth/token/
+          scopes:
+            read: ''
+            read:profile: ''
+            read:libraries: ''
+            read:edits: ''
+            read:follows: ''
+            read:favorites: ''
+            read:filters: ''
+            read:listenings: ''
+            read:radios: ''
+            read:playlists: ''
+            read:notifications: ''
+            read:security: ''
+            read:reports: ''
+            read:plugins: ''
+            read:instance:settings: ''
+            read:instance:users: ''
+            read:instance:invitations: ''
+            read:instance:edits: ''
+            read:instance:libraries: ''
+            read:instance:accounts: ''
+            read:instance:domains: ''
+            read:instance:policies: ''
+            read:instance:reports: ''
+            read:instance:requests: ''
+            read:instance:notes: ''
+            write: ''
+            write:profile: ''
+            write:libraries: ''
+            write:edits: ''
+            write:follows: ''
+            write:favorites: ''
+            write:filters: ''
+            write:listenings: ''
+            write:radios: ''
+            write:playlists: ''
+            write:notifications: ''
+            write:security: ''
+            write:reports: ''
+            write:plugins: ''
+            write:instance:settings: ''
+            write:instance:users: ''
+            write:instance:invitations: ''
+            write:instance:edits: ''
+            write:instance:libraries: ''
+            write:instance:accounts: ''
+            write:instance:domains: ''
+            write:instance:policies: ''
+            write:instance:reports: ''
+            write:instance:requests: ''
+            write:instance:notes: ''
+servers:
+- url: https://demo.funkwhale.audio
+  description: Demo Server
+- url: https://funkwhale.audio
+  description: Read server with real content
+- url: '{protocol}://{domain}'
+  description: Custom server
+  variables:
+    domain:
+      default: yourdomain
+      description: Your Funkwhale Domain
+    protocol:
+      enum:
+      - http
+      - https
+      default: https
diff --git a/src/api.ts b/src/api.ts
new file mode 100644
index 0000000000000000000000000000000000000000..17e084bf98ed5bc80980ead06c1e292b1e20e469
--- /dev/null
+++ b/src/api.ts
@@ -0,0 +1,4530 @@
+/**
+ * Funkwhale API
+ * 1.2.8
+ * DO NOT MODIFY - This file has been generated using oazapfts.
+ * See https://www.npmjs.com/package/oazapfts
+ */
+import * as Oazapfts from "oazapfts/lib/runtime";
+import * as QS from "oazapfts/lib/runtime/query";
+export const defaults: Oazapfts.RequestOpts = {
+    baseUrl: "https://demo.funkwhale.audio",
+};
+const oazapfts = Oazapfts.runtime(defaults);
+export const servers = {
+    demoServer: "https://demo.funkwhale.audio",
+    readServerWithRealContent: "https://funkwhale.audio",
+    customServer: ({ domain = "yourdomain", protocol = "https" }: {
+        domain: string | number | boolean;
+        protocol: "http" | "https";
+    }) => `${protocol}://${domain}`
+};
+export type CoverField = {
+    uuid: string;
+    size: number;
+    mimetype: string;
+    creation_date: string;
+    file: string;
+    urls: {
+        [key: string]: any;
+    };
+};
+export type ContentCategoryEnum = "music" | "podcast" | "other";
+export type ContentTypeEnum = "text/html" | "text/markdown" | "text/plain";
+export type Content = {
+    text: string | null;
+    content_type: ContentTypeEnum;
+    html: string;
+};
+export type SimpleArtist = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    name: string;
+    creation_date?: string;
+    modification_date?: string;
+    is_local: boolean;
+    content_category?: ContentCategoryEnum;
+    description: Content;
+    attachment_cover: CoverField;
+    channel: number;
+};
+export type FederationChoiceEnum = "Person" | "Tombstone" | "Application" | "Group" | "Organization" | "Service";
+export type ApiActor = {
+    fid: string;
+    url?: string | null;
+    creation_date?: string;
+    summary?: string | null;
+    preferred_username: string | null;
+    name?: string | null;
+    last_fetch_date?: string;
+    domain: string;
+    "type"?: FederationChoiceEnum;
+    manually_approves_followers?: boolean | null;
+    full_username: string;
+    is_local: boolean;
+};
+export type Album = {
+    cover: CoverField;
+    artist: SimpleArtist;
+    is_playable: boolean;
+    tags: string[];
+    tracks_count: number;
+    attributed_to: ApiActor;
+    id: number;
+    fid: string;
+    mbid: string;
+    title: string;
+    release_date: string;
+    creation_date: string;
+    is_local: boolean;
+    duration: number;
+};
+export type PaginatedAlbumList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Album[];
+};
+export type AlbumCreate = {
+    cover?: string | null;
+    title: string;
+    release_date?: string | null;
+    tags?: string[];
+    description?: (Content) | null;
+    artist: string;
+};
+export type ArtistAlbum = {
+    cover: CoverField;
+    tracks_count: number;
+    is_playable: boolean;
+    is_local: boolean;
+    id: number;
+    fid: string;
+    mbid: string;
+    title: string;
+    artist: number;
+    release_date: string;
+    creation_date: string;
+};
+export type ArtistWithAlbums = {
+    cover: CoverField;
+    albums: ArtistAlbum[];
+    tags: string[];
+    attributed_to: ApiActor;
+    channel: {
+        [key: string]: any;
+    };
+    tracks_count: number;
+    id: number;
+    fid: string;
+    mbid: string;
+    name: string;
+    content_category: string;
+    creation_date: string;
+    is_local: boolean;
+};
+export type PaginatedArtistWithAlbumsList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ArtistWithAlbums[];
+};
+export type Attachment = {
+    uuid: string;
+    size: number;
+    mimetype: string;
+    creation_date: string;
+    file: string;
+    urls: {
+        [key: string]: any;
+    };
+};
+export type PasswordChange = {
+    old_password: string;
+    new_password1: string;
+    new_password2: string;
+};
+export type PasswordReset = {
+    email: string;
+};
+export type PasswordResetConfirm = {
+    new_password1: string;
+    new_password2: string;
+    uid: string;
+    token: string;
+};
+export type Register = {
+    username: string;
+    email: string;
+    password1: string;
+    password2: string;
+    invitation?: string | null;
+};
+export type VerifyEmail = {
+    key: string;
+};
+export type UserDetails = {
+    pk: number;
+    username: string;
+    email: string;
+    first_name?: string;
+    last_name?: string;
+};
+export type PatchedUserDetails = {
+    pk?: number;
+    username?: string;
+    email?: string;
+    first_name?: string;
+    last_name?: string;
+};
+export type Channel = {
+    uuid?: string;
+    artist: SimpleArtist;
+    attributed_to: ApiActor;
+    actor: ApiActor;
+    creation_date?: string;
+    metadata?: {
+        [key: string]: any;
+    };
+    rss_url: string;
+    url: string;
+    downloads_count: number;
+};
+export type PaginatedChannelList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Channel[];
+};
+export type ChannelCreate = {
+    cover?: string | null;
+    name: string;
+    username: string;
+    description: (Content) | null;
+    tags: string[];
+    content_category: ContentCategoryEnum;
+    metadata?: {
+        [key: string]: any;
+    };
+};
+export type ChannelUpdate = {
+    cover?: string | null;
+    name: string;
+    description: (Content) | null;
+    tags: string[];
+    content_category: ContentCategoryEnum;
+    metadata?: {
+        [key: string]: any;
+    };
+};
+export type PatchedChannelUpdate = {
+    cover?: string | null;
+    name?: string;
+    description?: (Content) | null;
+    tags?: string[];
+    content_category?: ContentCategoryEnum;
+    metadata?: {
+        [key: string]: any;
+    };
+};
+export type UserBasic = {
+    id: number;
+    username: string;
+    name?: string;
+    date_joined?: string;
+    avatar: Attachment;
+};
+export type TrackAlbum = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    title: string;
+    artist: SimpleArtist;
+    release_date?: string | null;
+    cover: CoverField;
+    creation_date?: string;
+    is_local: boolean;
+    tracks_count: number;
+};
+export type Track = {
+    cover: CoverField;
+    artist: SimpleArtist;
+    album: TrackAlbum;
+    uploads: object[];
+    listen_url: string;
+    tags: any[];
+    attributed_to: ApiActor;
+    id: number;
+    fid: string;
+    mbid: string;
+    title: string;
+    creation_date: string;
+    is_local: boolean;
+    position: number;
+    disc_number: number;
+    downloads_count: number;
+    copyright: string;
+    license: string;
+    is_playable: boolean;
+};
+export type UserTrackFavorite = {
+    id: number;
+    user: UserBasic;
+    track: Track;
+    creation_date?: string;
+    actor: ApiActor;
+};
+export type PaginatedUserTrackFavoriteList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: UserTrackFavorite[];
+};
+export type UserTrackFavoriteWrite = {
+    id: number;
+    track: number;
+    creation_date?: string;
+};
+export type FullActor = {
+    fid: string;
+    url: string;
+    domain: string;
+    creation_date: string;
+    last_fetch_date: string;
+    name: string;
+    preferred_username: string;
+    full_username: string;
+    "type": string;
+    is_local: boolean;
+    is_channel: boolean;
+    manually_approves_followers: boolean;
+    user: UserBasic;
+    summary: Content;
+    icon: Attachment;
+};
+export type Domain = {
+    name: string;
+};
+export type PaginatedDomainList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Domain[];
+};
+export type FetchStatusEnum = "pending" | "errored" | "finished" | "skipped";
+export type Fetch = {
+    id: number;
+    url: string;
+    actor: ApiActor;
+    status: FetchStatusEnum;
+    detail: {
+        [key: string]: any;
+    };
+    creation_date: string;
+    fetch_date: string | null;
+    "object": string;
+    force?: boolean;
+};
+export type LibraryFollow = {
+    creation_date: string;
+    actor: ApiActor;
+    uuid: string;
+    target: string;
+    approved: boolean | null;
+};
+export type PaginatedLibraryFollowList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: LibraryFollow[];
+};
+export type InboxItemTypeEnum = "to" | "cc";
+export type Activity = {
+    uuid?: string;
+    fid?: string | null;
+    actor: ApiActor;
+    payload?: {
+        [key: string]: any;
+    };
+    "object": {
+        [key: string]: any;
+    };
+    target: {
+        [key: string]: any;
+    };
+    related_object: {
+        [key: string]: any;
+    };
+    creation_date?: string;
+    "type"?: string | null;
+};
+export type InboxItem = {
+    id: number;
+    "type": InboxItemTypeEnum;
+    activity: Activity;
+    is_read?: boolean;
+};
+export type PaginatedInboxItemList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: InboxItem[];
+};
+export type PatchedInboxItem = {
+    id?: number;
+    "type"?: InboxItemTypeEnum;
+    activity?: Activity;
+    is_read?: boolean;
+};
+export type LibraryPrivacyLevelEnum = "me" | "instance" | "everyone";
+export type NestedLibraryFollow = {
+    creation_date?: string;
+    uuid?: string;
+    fid?: string | null;
+    approved?: boolean | null;
+    modification_date: string;
+};
+export type LibraryScan = {
+    total_files?: number;
+    processed_files?: number;
+    errored_files?: number;
+    status?: string;
+    creation_date?: string;
+    modification_date?: string | null;
+};
+export type Library = {
+    fid: string;
+    uuid?: string;
+    actor: ApiActor;
+    name: string;
+    description?: string | null;
+    creation_date?: string;
+    uploads_count: number;
+    privacy_level?: LibraryPrivacyLevelEnum;
+    follow: NestedLibraryFollow;
+    latest_scan: LibraryScan;
+};
+export type Listening = {
+    id: number;
+    user: UserBasic;
+    track: Track;
+    creation_date?: string | null;
+    actor: ApiActor;
+};
+export type PaginatedListeningList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Listening[];
+};
+export type ListeningWrite = {
+    id: number;
+    user?: number | null;
+    track: number;
+    creation_date?: string | null;
+};
+export type GlobalPreference = {
+    section: string;
+    name: string;
+    identifier: string;
+    "default": string;
+    value: string;
+    verbose_name: string;
+    help_text: string;
+    additional_data: string;
+    field: string;
+};
+export type PatchedGlobalPreference = {
+    section?: string;
+    name?: string;
+    identifier?: string;
+    "default"?: string;
+    value?: string;
+    verbose_name?: string;
+    help_text?: string;
+    additional_data?: string;
+    field?: string;
+};
+export type Software = {
+    name: string;
+    version: string;
+};
+export type Services = {
+    inbound?: string[];
+    outbound?: string[];
+};
+export type UsersUsage = {
+    total: number;
+    activeHalfyear: number;
+    activeMonth: number;
+};
+export type Usage = {
+    users: UsersUsage;
+};
+export type AllowListStat = {
+    enabled: boolean;
+    domains: string[];
+};
+export type ReportType = {
+    "type": string;
+    label: string;
+    anonymous: boolean;
+};
+export type Endpoints = {
+    knownNodes?: string;
+    channels?: string;
+    libraries?: string;
+};
+export type TotalCount = {
+    total: number;
+};
+export type MetadataUsageFavorite = {
+    tracks: TotalCount;
+};
+export type MetadataUsage = {
+    favorites: MetadataUsageFavorite;
+    listenings: TotalCount;
+    downloads: TotalCount;
+};
+export type Metadata = {
+    actorId: string;
+    "private": boolean;
+    shortDescription: string;
+    longDescription: string;
+    rules: string;
+    contactEmail: string;
+    terms: string;
+    nodeName: string;
+    banner: string;
+    defaultUploadQuota: number;
+    library: boolean;
+    supportedUploadExtensions: string[];
+    allowList: AllowListStat;
+    reportTypes: ReportType[];
+    funkwhaleSupportMessageEnabled: boolean;
+    instanceSupportMessage: string;
+    endpoints: Endpoints;
+    usage: MetadataUsage;
+};
+export type NodeInfo20 = {
+    version: string;
+    software: Software;
+    protocols: any[];
+    services?: Services;
+    openRegistrations: boolean;
+    usage: Usage;
+    metadata: Metadata;
+};
+export type LibraryForOwner = {
+    uuid: string;
+    fid: string;
+    name: string;
+    description?: string | null;
+    privacy_level?: LibraryPrivacyLevelEnum;
+    uploads_count: number;
+    size: number;
+    creation_date: string;
+    actor: ApiActor;
+};
+export type PaginatedLibraryForOwnerList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: LibraryForOwner[];
+};
+export type PatchedLibraryForOwner = {
+    uuid?: string;
+    fid?: string;
+    name?: string;
+    description?: string | null;
+    privacy_level?: LibraryPrivacyLevelEnum;
+    uploads_count?: number;
+    size?: number;
+    creation_date?: string;
+    actor?: ApiActor;
+};
+export type License = {
+    id: string;
+    url: string;
+    code: string;
+    name: string;
+    redistribute: boolean;
+    derivative: boolean;
+    commercial: boolean;
+    attribution: boolean;
+    copyleft: boolean;
+};
+export type PaginatedLicenseList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: License[];
+};
+export type PrivacyLevelEnum = "me" | "followers" | "instance" | "everyone";
+export type ManageUser = {
+    id: number;
+    username: string;
+    actor: {
+        [key: string]: any;
+    };
+    email: string;
+    name?: string;
+    is_active?: boolean;
+    is_staff?: boolean;
+    is_superuser?: boolean;
+    date_joined: string;
+    last_activity: string | null;
+    privacy_level: PrivacyLevelEnum;
+    upload_quota: number | null;
+    full_username: string;
+};
+export type ManageActor = {
+    id: number;
+    url?: string | null;
+    fid: string;
+    preferred_username: string | null;
+    full_username: string;
+    domain: string;
+    name?: string | null;
+    summary?: string | null;
+    "type"?: FederationChoiceEnum;
+    creation_date: string;
+    last_fetch_date?: string;
+    inbox_url?: string | null;
+    outbox_url?: string | null;
+    shared_inbox_url?: string | null;
+    manually_approves_followers?: boolean | null;
+    is_local: boolean;
+    uploads_count: number;
+    user: ManageUser;
+    instance_policy: number;
+};
+export type PaginatedManageActorList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageActor[];
+};
+export type ManageBaseActor = {
+    id: number;
+    url?: string | null;
+    fid: string;
+    preferred_username: string | null;
+    full_username: string;
+    domain: string;
+    name?: string | null;
+    summary?: string | null;
+    "type"?: FederationChoiceEnum;
+    creation_date: string;
+    last_fetch_date?: string;
+    inbox_url?: string | null;
+    outbox_url?: string | null;
+    shared_inbox_url?: string | null;
+    manually_approves_followers?: boolean | null;
+    is_local: boolean;
+};
+export type ManageArtist = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    name: string;
+    creation_date?: string;
+    domain: string;
+    is_local: boolean;
+    tracks_count: number;
+    albums_count: number;
+    attributed_to: ManageBaseActor;
+    tags: string[];
+    cover: CoverField;
+    channel: string;
+    content_category?: ContentCategoryEnum;
+};
+export type ManageChannel = {
+    id: number;
+    uuid: string;
+    creation_date: string;
+    artist: ManageArtist;
+    attributed_to: ManageBaseActor;
+    actor: ManageBaseActor;
+    rss_url: string | null;
+    metadata: {
+        [key: string]: any;
+    };
+};
+export type PaginatedManageChannelList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageChannel[];
+};
+export type ManageDomain = {
+    name: string;
+    creation_date: string;
+    actors_count: number;
+    outbox_activities_count: number;
+    nodeinfo: {
+        [key: string]: any;
+    };
+    nodeinfo_fetch_date: string | null;
+    instance_policy: number;
+    allowed?: boolean | null;
+};
+export type PaginatedManageDomainList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageDomain[];
+};
+export type ManageDomainUpdate = {
+    name: string;
+    creation_date: string;
+    actors_count: number;
+    outbox_activities_count: number;
+    nodeinfo: {
+        [key: string]: any;
+    };
+    nodeinfo_fetch_date: string | null;
+    instance_policy: number;
+    allowed?: boolean | null;
+};
+export type PatchedManageDomainUpdate = {
+    name?: string;
+    creation_date?: string;
+    actors_count?: number;
+    outbox_activities_count?: number;
+    nodeinfo?: {
+        [key: string]: any;
+    };
+    nodeinfo_fetch_date?: string | null;
+    instance_policy?: number;
+    allowed?: boolean | null;
+};
+export type ManageNestedArtist = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    name: string;
+    creation_date?: string;
+    domain: string;
+    is_local: boolean;
+};
+export type ManageAlbum = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    title: string;
+    creation_date?: string;
+    release_date?: string | null;
+    cover: CoverField;
+    domain: string;
+    is_local: boolean;
+    tracks_count: number;
+    artist: ManageNestedArtist;
+    attributed_to: ManageBaseActor;
+    tags: string[];
+};
+export type PaginatedManageAlbumList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageAlbum[];
+};
+export type PaginatedManageArtistList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageArtist[];
+};
+export type ManageLibrary = {
+    id: number;
+    uuid: string;
+    fid: string;
+    url: string | null;
+    name: string;
+    description?: string | null;
+    domain: string;
+    is_local: boolean;
+    creation_date: string;
+    privacy_level?: LibraryPrivacyLevelEnum;
+    uploads_count: number;
+    followers_count: number;
+    followers_url: string;
+    actor: ManageBaseActor;
+};
+export type PaginatedManageLibraryList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageLibrary[];
+};
+export type PatchedManageLibrary = {
+    id?: number;
+    uuid?: string;
+    fid?: string;
+    url?: string | null;
+    name?: string;
+    description?: string | null;
+    domain?: string;
+    is_local?: boolean;
+    creation_date?: string;
+    privacy_level?: LibraryPrivacyLevelEnum;
+    uploads_count?: number;
+    followers_count?: number;
+    followers_url?: string;
+    actor?: ManageBaseActor;
+};
+export type ManageTrackAlbum = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    title: string;
+    creation_date?: string;
+    release_date?: string | null;
+    cover: CoverField;
+    domain: string;
+    is_local: boolean;
+    tracks_count: number;
+    artist: ManageNestedArtist;
+};
+export type ManageTrack = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    title: string;
+    creation_date?: string;
+    position?: number | null;
+    disc_number?: number | null;
+    domain: string;
+    is_local: boolean;
+    copyright?: string | null;
+    license?: string | null;
+    artist: ManageNestedArtist;
+    album: ManageTrackAlbum;
+    attributed_to: ManageBaseActor;
+    uploads_count: number;
+    tags: string[];
+    cover: CoverField;
+};
+export type PaginatedManageTrackList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageTrack[];
+};
+export type ManageUploadImportStatusEnum = "draft" | "pending" | "finished" | "errored" | "skipped";
+export type ManageNestedTrack = {
+    id: number;
+    fid?: string | null;
+    mbid?: string | null;
+    title: string;
+    creation_date?: string;
+    position?: number | null;
+    disc_number?: number | null;
+    domain: string;
+    is_local: boolean;
+    copyright?: string | null;
+    license?: string | null;
+};
+export type ManageNestedLibrary = {
+    id: number;
+    uuid?: string;
+    fid: string;
+    url?: string | null;
+    name: string;
+    description?: string | null;
+    domain: string;
+    is_local: boolean;
+    creation_date?: string;
+    privacy_level?: LibraryPrivacyLevelEnum;
+    followers_url: string;
+    actor: ManageBaseActor;
+};
+export type ManageUpload = {
+    id: number;
+    uuid?: string;
+    fid?: string | null;
+    domain: string;
+    is_local: boolean;
+    audio_file: string;
+    listen_url: string;
+    source?: string | null;
+    filename: string;
+    mimetype?: string | null;
+    duration?: number | null;
+    bitrate?: number | null;
+    size?: number | null;
+    creation_date?: string;
+    accessed_date?: string | null;
+    modification_date?: string | null;
+    metadata?: {
+        [key: string]: any;
+    };
+    import_date?: string | null;
+    import_details?: {
+        [key: string]: any;
+    };
+    import_status?: ManageUploadImportStatusEnum;
+    import_metadata?: {
+        [key: string]: any;
+    };
+    import_reference?: string;
+    track: ManageNestedTrack;
+    library: ManageNestedLibrary;
+};
+export type PaginatedManageUploadList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageUpload[];
+};
+export type ManageTargetTypeEnum = "domain" | "actor";
+export type ManageTarget = {
+    "type": ManageTargetTypeEnum;
+    id: string;
+};
+export type ManageInstancePolicy = {
+    id: number;
+    uuid: string;
+    target: ManageTarget;
+    creation_date: string;
+    actor: string;
+    summary?: string | null;
+    is_active?: boolean;
+    block_all?: boolean;
+    silence_activity?: boolean;
+    silence_notifications?: boolean;
+    reject_media?: boolean;
+};
+export type PaginatedManageInstancePolicyList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageInstancePolicy[];
+};
+export type PatchedManageInstancePolicy = {
+    id?: number;
+    uuid?: string;
+    target?: ManageTarget;
+    creation_date?: string;
+    actor?: string;
+    summary?: string | null;
+    is_active?: boolean;
+    block_all?: boolean;
+    silence_activity?: boolean;
+    silence_notifications?: boolean;
+    reject_media?: boolean;
+};
+export type ManageNote = {
+    id: number;
+    uuid: string;
+    creation_date: string;
+    summary: string;
+    author: ManageBaseActor;
+    target: {
+        [key: string]: any;
+    };
+};
+export type PaginatedManageNoteList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageNote[];
+};
+export type ReportTypeEnum = "takedown_request" | "invalid_metadata" | "illegal_content" | "offensive_content" | "other";
+export type ManageBaseNote = {
+    id: number;
+    uuid: string;
+    creation_date: string;
+    summary: string;
+    author: ManageBaseActor;
+};
+export type ManageReport = {
+    id: number;
+    uuid: string;
+    fid: string;
+    creation_date: string;
+    handled_date: string | null;
+    summary: string | null;
+    "type": ReportTypeEnum;
+    target: {
+        [key: string]: any;
+    };
+    target_state: {
+        [key: string]: any;
+    } | null;
+    is_handled?: boolean;
+    assigned_to: ManageBaseActor;
+    target_owner: ManageBaseActor;
+    submitter: ManageBaseActor;
+    submitter_email: string | null;
+    notes: ManageBaseNote;
+};
+export type PaginatedManageReportList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageReport[];
+};
+export type PatchedManageReport = {
+    id?: number;
+    uuid?: string;
+    fid?: string;
+    creation_date?: string;
+    handled_date?: string | null;
+    summary?: string | null;
+    "type"?: ReportTypeEnum;
+    target?: {
+        [key: string]: any;
+    };
+    target_state?: {
+        [key: string]: any;
+    } | null;
+    is_handled?: boolean;
+    assigned_to?: ManageBaseActor;
+    target_owner?: ManageBaseActor;
+    submitter?: ManageBaseActor;
+    submitter_email?: string | null;
+    notes?: ManageBaseNote;
+};
+export type ManageUserRequestTypeEnum = "signup";
+export type ManageUserRequestStatusEnum = "pending" | "refused" | "approved";
+export type ManageUserRequest = {
+    id: number;
+    uuid: string;
+    creation_date: string;
+    handled_date: string | null;
+    "type": ManageUserRequestTypeEnum;
+    status?: ManageUserRequestStatusEnum;
+    assigned_to: ManageBaseActor;
+    submitter: ManageBaseActor;
+    notes: ManageBaseNote;
+    metadata: {
+        [key: string]: any;
+    } | null;
+};
+export type PaginatedManageUserRequestList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageUserRequest[];
+};
+export type PatchedManageUserRequest = {
+    id?: number;
+    uuid?: string;
+    creation_date?: string;
+    handled_date?: string | null;
+    "type"?: ManageUserRequestTypeEnum;
+    status?: ManageUserRequestStatusEnum;
+    assigned_to?: ManageBaseActor;
+    submitter?: ManageBaseActor;
+    notes?: ManageBaseNote;
+    metadata?: {
+        [key: string]: any;
+    } | null;
+};
+export type ManageTag = {
+    id: number;
+    name: string;
+    creation_date?: string;
+    tracks_count: number;
+    albums_count: number;
+    artists_count: number;
+};
+export type PaginatedManageTagList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageTag[];
+};
+export type ManageUserSimple = {
+    id: number;
+    username: string;
+    email?: string;
+    name?: string;
+    is_active?: boolean;
+    is_staff?: boolean;
+    is_superuser?: boolean;
+    date_joined?: string;
+    last_activity?: string | null;
+    privacy_level?: PrivacyLevelEnum;
+    upload_quota?: number | null;
+};
+export type ManageInvitation = {
+    id: number;
+    owner?: ManageUserSimple;
+    code?: string | null;
+    expiration_date: string;
+    creation_date: string;
+    users?: ManageUserSimple[];
+};
+export type PaginatedManageInvitationList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageInvitation[];
+};
+export type PatchedManageInvitation = {
+    id?: number;
+    owner?: ManageUserSimple;
+    code?: string | null;
+    expiration_date?: string;
+    creation_date?: string;
+    users?: ManageUserSimple[];
+};
+export type PaginatedManageUserList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ManageUser[];
+};
+export type PatchedManageUser = {
+    id?: number;
+    username?: string;
+    actor?: {
+        [key: string]: any;
+    };
+    email?: string;
+    name?: string;
+    is_active?: boolean;
+    is_staff?: boolean;
+    is_superuser?: boolean;
+    date_joined?: string;
+    last_activity?: string | null;
+    privacy_level?: PrivacyLevelEnum;
+    upload_quota?: number | null;
+    full_username?: string;
+};
+export type ModerationTargetTypeEnum = "artist";
+export type ModerationTarget = {
+    "type": ModerationTargetTypeEnum;
+    id: string;
+};
+export type UserFilter = {
+    uuid: string;
+    target: ModerationTarget;
+    creation_date: string;
+};
+export type PaginatedUserFilterList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: UserFilter[];
+};
+export type Report = {
+    uuid: string;
+    summary?: string | null;
+    creation_date: string;
+    handled_date: string | null;
+    is_handled: boolean;
+    submitter_email?: string | null;
+    target: {
+        [key: string]: any;
+    };
+    "type": ReportTypeEnum;
+};
+export type ApiMutation = {
+    fid: string;
+    uuid: string;
+    "type": string;
+    creation_date: string;
+    applied_date?: string | null;
+    is_approved?: boolean | null;
+    is_applied: boolean | null;
+    created_by: ApiActor;
+    approved_by: number | null;
+    summary?: string | null;
+    payload: {
+        [key: string]: any;
+    };
+    previous_state: {
+        [key: string]: any;
+    } | null;
+    target: {
+        [key: string]: any;
+    };
+};
+export type PaginatedApiMutationList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: ApiMutation[];
+};
+export type Application = {
+    client_id?: string;
+    name?: string;
+    scopes: string;
+    created: string;
+    updated: string;
+};
+export type PaginatedApplicationList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Application[];
+};
+export type CreateApplication = {
+    client_id: string;
+    name: string;
+    scopes?: string;
+    client_secret: string;
+    created: string;
+    updated: string;
+    redirect_uris?: string;
+};
+export type PatchedApplication = {
+    client_id?: string;
+    name?: string;
+    scopes?: string;
+    created?: string;
+    updated?: string;
+};
+export type Playlist = {
+    id: number;
+    name: string;
+    user: UserBasic;
+    modification_date: string;
+    creation_date: string;
+    privacy_level?: PrivacyLevelEnum;
+    tracks_count: number;
+    album_covers: any[];
+    duration: number;
+    is_playable: boolean;
+    actor: ApiActor;
+};
+export type PaginatedPlaylistList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Playlist[];
+};
+export type PatchedPlaylist = {
+    id?: number;
+    name?: string;
+    user?: UserBasic;
+    modification_date?: string;
+    creation_date?: string;
+    privacy_level?: PrivacyLevelEnum;
+    tracks_count?: number;
+    album_covers?: any[];
+    duration?: number;
+    is_playable?: boolean;
+    actor?: ApiActor;
+};
+export type Radio = {
+    id: number;
+    is_public?: boolean;
+    name: string;
+    creation_date: string;
+    user: UserBasic;
+    config: {
+        [key: string]: any;
+    };
+    description?: string;
+};
+export type PaginatedRadioList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Radio[];
+};
+export type PatchedRadio = {
+    id?: number;
+    is_public?: boolean;
+    name?: string;
+    creation_date?: string;
+    user?: UserBasic;
+    config?: {
+        [key: string]: any;
+    };
+    description?: string;
+};
+export type RadioSession = {
+    id: number;
+    radio_type: string;
+    related_object_id?: string | null;
+    user?: number | null;
+    creation_date?: string;
+    custom_radio?: number | null;
+    config?: {
+        [key: string]: any;
+    } | null;
+};
+export type RadioSessionTrackSerializerCreate = {
+    session: number;
+};
+export type Ident = {
+    "type": string;
+    id: number;
+};
+export type Scopes = {
+    id: string;
+    rate: string;
+    description: string;
+    limit: number;
+    duration: number;
+    remaining: number;
+    available: number;
+    available_seconds: number;
+    reset: number;
+    reset_seconds: number;
+};
+export type RateLimit = {
+    enabled: boolean;
+    ident: Ident;
+    scopes: Scopes[];
+};
+export type Subscription = {
+    approved: boolean;
+    fid: string;
+    uuid: string;
+    creation_date: string;
+};
+export type PaginatedSubscriptionList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Subscription[];
+};
+export type Tag = {
+    name: string;
+    creation_date?: string;
+};
+export type PaginatedTagList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Tag[];
+};
+export type PaginatedTrackList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: Track[];
+};
+export type UploadForOwnerImportStatusEnum = "draft" | "pending";
+export type UploadForOwner = {
+    uuid: string;
+    filename: string;
+    creation_date: string;
+    mimetype: string | null;
+    track?: (Track) | null;
+    library?: string;
+    channel?: string;
+    duration: number | null;
+    bitrate: number | null;
+    size: number | null;
+    import_date: string | null;
+    import_status?: UploadForOwnerImportStatusEnum;
+    import_details: {
+        [key: string]: any;
+    };
+    import_metadata?: {
+        [key: string]: any;
+    };
+    import_reference?: string;
+    metadata: {
+        [key: string]: any;
+    };
+    source?: string | null;
+    audio_file: string;
+};
+export type PaginatedUploadForOwnerList = {
+    count?: number;
+    next?: string | null;
+    previous?: string | null;
+    results?: UploadForOwner[];
+};
+export type PatchedUploadForOwner = {
+    uuid?: string;
+    filename?: string;
+    creation_date?: string;
+    mimetype?: string | null;
+    track?: (Track) | null;
+    library?: string;
+    channel?: string;
+    duration?: number | null;
+    bitrate?: number | null;
+    size?: number | null;
+    import_date?: string | null;
+    import_status?: UploadForOwnerImportStatusEnum;
+    import_details?: {
+        [key: string]: any;
+    };
+    import_metadata?: {
+        [key: string]: any;
+    };
+    import_reference?: string;
+    metadata?: {
+        [key: string]: any;
+    };
+    source?: string | null;
+    audio_file?: string;
+};
+export type UserWrite = {
+    name?: string;
+    privacy_level?: PrivacyLevelEnum;
+    avatar: string;
+    instance_support_message_display_date?: string | null;
+    funkwhale_support_message_display_date?: string | null;
+    summary?: (Content) | null;
+};
+export type PatchedUserWrite = {
+    name?: string;
+    privacy_level?: PrivacyLevelEnum;
+    avatar?: string;
+    instance_support_message_display_date?: string | null;
+    funkwhale_support_message_display_date?: string | null;
+    summary?: (Content) | null;
+};
+export function activityList({ ordering, page, pageSize }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/activity/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function albumsList({ artist, channel, contentCategory, hidden, includeChannels, library, mbid, ordering, page, pageSize, playable, q, related, scope, tag }: {
+    artist?: number;
+    channel?: string;
+    contentCategory?: string;
+    hidden?: boolean;
+    includeChannels?: boolean;
+    library?: string;
+    mbid?: string;
+    ordering?: ("-artist__modification_date" | "-creation_date" | "-random" | "-related" | "-release_date" | "-title" | "artist__modification_date" | "creation_date" | "random" | "related" | "release_date" | "title")[];
+    page?: number;
+    pageSize?: number;
+    playable?: boolean;
+    q?: string;
+    related?: string;
+    scope?: string;
+    tag?: string[];
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedAlbumList;
+    }>(`/api/v1/albums/${QS.query(QS.explode({
+        artist,
+        channel,
+        content_category: contentCategory,
+        hidden,
+        include_channels: includeChannels,
+        library,
+        mbid,
+        page,
+        page_size: pageSize,
+        playable,
+        q,
+        related,
+        scope,
+        tag
+    }), QS.form({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+export function albumsCreate(albumCreate: AlbumCreate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: AlbumCreate;
+    }>("/api/v1/albums/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: albumCreate
+    }));
+}
+export function albumsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Album;
+    }>(`/api/v1/albums/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function albumsDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/albums/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function albumsFetchesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Album;
+    }>(`/api/v1/albums/${encodeURIComponent(id)}/fetches/`, {
+        ...opts
+    });
+}
+export function albumsFetchesCreate(id: number, album: Album, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Album;
+    }>(`/api/v1/albums/${encodeURIComponent(id)}/fetches/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: album
+    }));
+}
+export function albumsLibrariesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Album;
+    }>(`/api/v1/albums/${encodeURIComponent(id)}/libraries/`, {
+        ...opts
+    });
+}
+export function albumsMutationsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Album;
+    }>(`/api/v1/albums/${encodeURIComponent(id)}/mutations/`, {
+        ...opts
+    });
+}
+export function albumsMutationsCreate(id: number, album: Album, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Album;
+    }>(`/api/v1/albums/${encodeURIComponent(id)}/mutations/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: album
+    }));
+}
+export function artistsList({ contentCategory, hasAlbums, hidden, includeChannels, library, mbid, name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, playable, q, related, scope, tag }: {
+    contentCategory?: string;
+    hasAlbums?: boolean;
+    hidden?: boolean;
+    includeChannels?: boolean;
+    library?: string;
+    mbid?: string;
+    name?: string;
+    nameIcontains?: string;
+    nameIexact?: string;
+    nameStartswith?: string;
+    ordering?: ("-creation_date" | "-id" | "-modification_date" | "-name" | "-random" | "-related" | "creation_date" | "id" | "modification_date" | "name" | "random" | "related")[];
+    page?: number;
+    pageSize?: number;
+    playable?: boolean;
+    q?: string;
+    related?: string;
+    scope?: string;
+    tag?: string[];
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedArtistWithAlbumsList;
+    }>(`/api/v1/artists/${QS.query(QS.explode({
+        content_category: contentCategory,
+        has_albums: hasAlbums,
+        hidden,
+        include_channels: includeChannels,
+        library,
+        mbid,
+        name,
+        name__icontains: nameIcontains,
+        name__iexact: nameIexact,
+        name__startswith: nameStartswith,
+        page,
+        page_size: pageSize,
+        playable,
+        q,
+        related,
+        scope,
+        tag
+    }), QS.form({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+export function artistsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ArtistWithAlbums;
+    }>(`/api/v1/artists/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function artistsFetchesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ArtistWithAlbums;
+    }>(`/api/v1/artists/${encodeURIComponent(id)}/fetches/`, {
+        ...opts
+    });
+}
+export function artistsFetchesCreate(id: number, artistWithAlbums: ArtistWithAlbums, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ArtistWithAlbums;
+    }>(`/api/v1/artists/${encodeURIComponent(id)}/fetches/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: artistWithAlbums
+    }));
+}
+export function artistsLibrariesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ArtistWithAlbums;
+    }>(`/api/v1/artists/${encodeURIComponent(id)}/libraries/`, {
+        ...opts
+    });
+}
+export function artistsMutationsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ArtistWithAlbums;
+    }>(`/api/v1/artists/${encodeURIComponent(id)}/mutations/`, {
+        ...opts
+    });
+}
+export function artistsMutationsCreate(id: number, artistWithAlbums: ArtistWithAlbums, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ArtistWithAlbums;
+    }>(`/api/v1/artists/${encodeURIComponent(id)}/mutations/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: artistWithAlbums
+    }));
+}
+export function attachmentsCreate(attachment: Attachment, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: Attachment;
+    }>("/api/v1/attachments/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: attachment
+    }));
+}
+export function attachmentsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Attachment;
+    }>(`/api/v1/attachments/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function attachmentsDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/attachments/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function attachmentsProxyRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Attachment;
+    }>(`/api/v1/attachments/${encodeURIComponent(uuid)}/proxy/`, {
+        ...opts
+    });
+}
+/**
+ * Calls Django Auth SetPasswordForm save method.
+ *
+ * Accepts the following POST parameters: new_password1, new_password2
+ * Returns the success/fail message.
+ */
+export function authPasswordChangeCreate(passwordChange: PasswordChange, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PasswordChange;
+    }>("/api/v1/auth/password/change/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: passwordChange
+    }));
+}
+/**
+ * Calls Django Auth PasswordResetForm save method.
+ *
+ * Accepts the following POST parameters: email
+ * Returns the success/fail message.
+ */
+export function authPasswordResetCreate(passwordReset: PasswordReset, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PasswordReset;
+    }>("/api/v1/auth/password/reset/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: passwordReset
+    }));
+}
+/**
+ * Password reset e-mail link is confirmed, therefore
+ * this resets the user's password.
+ *
+ * Accepts the following POST parameters: token, uid,
+ *     new_password1, new_password2
+ * Returns the success/fail message.
+ */
+export function authPasswordResetConfirmCreate(passwordResetConfirm: PasswordResetConfirm, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PasswordResetConfirm;
+    }>("/api/v1/auth/password/reset/confirm/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: passwordResetConfirm
+    }));
+}
+export function authRegistrationCreate(register: Register, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: Register;
+    }>("/api/v1/auth/registration/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: register
+    }));
+}
+/**
+ * Calls Django Auth SetPasswordForm save method.
+ *
+ * Accepts the following POST parameters: new_password1, new_password2
+ * Returns the success/fail message.
+ */
+export function authRegistrationChangePasswordCreate(passwordChange: PasswordChange, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PasswordChange;
+    }>("/api/v1/auth/registration/change-password/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: passwordChange
+    }));
+}
+export function authRegistrationVerifyEmailCreate(verifyEmail: VerifyEmail, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: VerifyEmail;
+    }>("/api/v1/auth/registration/verify-email/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: verifyEmail
+    }));
+}
+/**
+ * Reads and updates UserModel fields
+ * Accepts GET, PUT, PATCH methods.
+ *
+ * Default accepted fields: username, first_name, last_name
+ * Default display fields: pk, username, email, first_name, last_name
+ * Read-only fields: pk, email
+ *
+ * Returns UserModel fields.
+ */
+export function authUserRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserDetails;
+    }>("/api/v1/auth/user/", {
+        ...opts
+    });
+}
+/**
+ * Reads and updates UserModel fields
+ * Accepts GET, PUT, PATCH methods.
+ *
+ * Default accepted fields: username, first_name, last_name
+ * Default display fields: pk, username, email, first_name, last_name
+ * Read-only fields: pk, email
+ *
+ * Returns UserModel fields.
+ */
+export function authUserUpdate(userDetails: UserDetails, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserDetails;
+    }>("/api/v1/auth/user/", oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: userDetails
+    }));
+}
+/**
+ * Reads and updates UserModel fields
+ * Accepts GET, PUT, PATCH methods.
+ *
+ * Default accepted fields: username, first_name, last_name
+ * Default display fields: pk, username, email, first_name, last_name
+ * Read-only fields: pk, email
+ *
+ * Returns UserModel fields.
+ */
+export function authUserPartialUpdate(patchedUserDetails?: PatchedUserDetails, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserDetails;
+    }>("/api/v1/auth/user/", oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedUserDetails
+    }));
+}
+export function channelsList({ external, hidden, ordering, page, pageSize, q, scope, subscribed, tag }: {
+    external?: boolean;
+    hidden?: boolean;
+    ordering?: ("-creation_date" | "-modification_date" | "-random" | "creation_date" | "modification_date" | "random")[];
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    scope?: string;
+    subscribed?: boolean;
+    tag?: string[];
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedChannelList;
+    }>(`/api/v1/channels/${QS.query(QS.explode({
+        external,
+        hidden,
+        page,
+        page_size: pageSize,
+        q,
+        scope,
+        subscribed,
+        tag
+    }), QS.form({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+export function channelsCreate(channelCreate: ChannelCreate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: ChannelCreate;
+    }>("/api/v1/channels/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: channelCreate
+    }));
+}
+export function channelsRetrieve(composite: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Channel;
+    }>(`/api/v1/channels/${encodeURIComponent(composite)}/`, {
+        ...opts
+    });
+}
+export function channelsUpdate(composite: string, channelUpdate: ChannelUpdate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ChannelUpdate;
+    }>(`/api/v1/channels/${encodeURIComponent(composite)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: channelUpdate
+    }));
+}
+export function channelsPartialUpdate(composite: string, patchedChannelUpdate?: PatchedChannelUpdate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ChannelUpdate;
+    }>(`/api/v1/channels/${encodeURIComponent(composite)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedChannelUpdate
+    }));
+}
+export function channelsDestroy(composite: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/channels/${encodeURIComponent(composite)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function channelsRssRetrieve(composite: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Channel;
+    }>(`/api/v1/channels/${encodeURIComponent(composite)}/rss/`, {
+        ...opts
+    });
+}
+export function channelsSubscribeCreate(composite: string, channelCreate: ChannelCreate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ChannelCreate;
+    }>(`/api/v1/channels/${encodeURIComponent(composite)}/subscribe/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: channelCreate
+    }));
+}
+export function channelsUnsubscribeCreate(composite: string, channelCreate: ChannelCreate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ChannelCreate;
+    }>(`/api/v1/channels/${encodeURIComponent(composite)}/unsubscribe/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: channelCreate
+    }));
+}
+export function channelsUnsubscribeDestroy(composite: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/channels/${encodeURIComponent(composite)}/unsubscribe/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function channelsMetadataChoicesRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Channel;
+    }>("/api/v1/channels/metadata-choices/", {
+        ...opts
+    });
+}
+export function channelsRssSubscribeCreate(channelCreate: ChannelCreate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ChannelCreate;
+    }>("/api/v1/channels/rss-subscribe/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: channelCreate
+    }));
+}
+export function favoritesTracksList({ hidden, ordering, page, pageSize, q, scope }: {
+    hidden?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    scope?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedUserTrackFavoriteList;
+    }>(`/api/v1/favorites/tracks/${QS.query(QS.explode({
+        hidden,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        scope
+    }))}`, {
+        ...opts
+    });
+}
+export function favoritesTracksCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: UserTrackFavoriteWrite;
+    }>("/api/v1/favorites/tracks/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userTrackFavoriteWrite
+    }));
+}
+export function favoritesTracksDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/favorites/tracks/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+/**
+ * Return all the favorites of the current user, with only limited data
+ * to have a performant endpoint and avoid lots of queries just to display
+ * favorites status in the UI
+ */
+export function favoritesTracksAllRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserTrackFavorite;
+    }>("/api/v1/favorites/tracks/all/", {
+        ...opts
+    });
+}
+export function favoritesTracksRemoveCreate(userTrackFavoriteWrite: UserTrackFavoriteWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserTrackFavoriteWrite;
+    }>("/api/v1/favorites/tracks/remove/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userTrackFavoriteWrite
+    }));
+}
+export function favoritesTracksRemoveDestroy(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/favorites/tracks/remove/", {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function federationActorsRetrieve(fullUsername: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: FullActor;
+    }>(`/api/v1/federation/actors/${encodeURIComponent(fullUsername)}/`, {
+        ...opts
+    });
+}
+export function federationActorsLibrariesRetrieve(fullUsername: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: FullActor;
+    }>(`/api/v1/federation/actors/${encodeURIComponent(fullUsername)}/libraries/`, {
+        ...opts
+    });
+}
+export function federationDomainsList({ ordering, page, pageSize }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedDomainList;
+    }>(`/api/v1/federation/domains/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function federationDomainsRetrieve(name: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Domain;
+    }>(`/api/v1/federation/domains/${encodeURIComponent(name)}/`, {
+        ...opts
+    });
+}
+export function federationFetchesCreate(fetch: Fetch, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: Fetch;
+    }>("/api/v1/federation/fetches/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: fetch
+    }));
+}
+export function federationFetchesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Fetch;
+    }>(`/api/v1/federation/fetches/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function federationFollowsLibraryList({ approved, ordering, page, pageSize }: {
+    approved?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedLibraryFollowList;
+    }>(`/api/v1/federation/follows/library/${QS.query(QS.explode({
+        approved,
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function federationFollowsLibraryCreate(libraryFollow: LibraryFollow, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: LibraryFollow;
+    }>("/api/v1/federation/follows/library/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: libraryFollow
+    }));
+}
+export function federationFollowsLibraryRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryFollow;
+    }>(`/api/v1/federation/follows/library/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function federationFollowsLibraryDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/federation/follows/library/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function federationFollowsLibraryAcceptCreate(uuid: string, libraryFollow: LibraryFollow, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryFollow;
+    }>(`/api/v1/federation/follows/library/${encodeURIComponent(uuid)}/accept/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: libraryFollow
+    }));
+}
+export function federationFollowsLibraryRejectCreate(uuid: string, libraryFollow: LibraryFollow, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryFollow;
+    }>(`/api/v1/federation/follows/library/${encodeURIComponent(uuid)}/reject/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: libraryFollow
+    }));
+}
+/**
+ * Return all the subscriptions of the current user, with only limited data
+ * to have a performant endpoint and avoid lots of queries just to display
+ * subscription status in the UI
+ */
+export function federationFollowsLibraryAllRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryFollow;
+    }>("/api/v1/federation/follows/library/all/", {
+        ...opts
+    });
+}
+export function federationInboxList({ activityActor, activityType, before, isRead, ordering, page, pageSize }: {
+    activityActor?: number;
+    activityType?: string;
+    before?: number;
+    isRead?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedInboxItemList;
+    }>(`/api/v1/federation/inbox/${QS.query(QS.explode({
+        activity__actor: activityActor,
+        activity__type: activityType,
+        before,
+        is_read: isRead,
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function federationInboxRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: InboxItem;
+    }>(`/api/v1/federation/inbox/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function federationInboxUpdate(id: number, inboxItem: InboxItem, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: InboxItem;
+    }>(`/api/v1/federation/inbox/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: inboxItem
+    }));
+}
+export function federationInboxPartialUpdate(id: number, patchedInboxItem?: PatchedInboxItem, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: InboxItem;
+    }>(`/api/v1/federation/inbox/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedInboxItem
+    }));
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function federationInboxActionCreate(inboxItem: InboxItem, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: InboxItem;
+    }>("/api/v1/federation/inbox/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: inboxItem
+    }));
+}
+export function federationLibrariesRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Library;
+    }>(`/api/v1/federation/libraries/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function federationLibrariesScanCreate(uuid: string, library: Library, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Library;
+    }>(`/api/v1/federation/libraries/${encodeURIComponent(uuid)}/scan/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: library
+    }));
+}
+export function federationLibrariesFetchCreate(library: Library, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Library;
+    }>("/api/v1/federation/libraries/fetch/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: library
+    }));
+}
+export function historyListeningsList({ domain, hidden, ordering, page, pageSize, scope, username }: {
+    domain?: string;
+    hidden?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    scope?: string;
+    username?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedListeningList;
+    }>(`/api/v1/history/listenings/${QS.query(QS.explode({
+        domain,
+        hidden,
+        ordering,
+        page,
+        page_size: pageSize,
+        scope,
+        username
+    }))}`, {
+        ...opts
+    });
+}
+export function historyListeningsCreate(listeningWrite: ListeningWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: ListeningWrite;
+    }>("/api/v1/history/listenings/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: listeningWrite
+    }));
+}
+export function historyListeningsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Listening;
+    }>(`/api/v1/history/listenings/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+/**
+ * - list preferences
+ * - detail given preference
+ * - batch update preferences
+ * - update a single preference
+ */
+export function instanceAdminSettingsList({ ordering }: {
+    ordering?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: GlobalPreference[];
+    }>(`/api/v1/instance/admin/settings/${QS.query(QS.explode({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+/**
+ * - list preferences
+ * - detail given preference
+ * - batch update preferences
+ * - update a single preference
+ */
+export function instanceAdminSettingsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: GlobalPreference;
+    }>(`/api/v1/instance/admin/settings/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+/**
+ * - list preferences
+ * - detail given preference
+ * - batch update preferences
+ * - update a single preference
+ */
+export function instanceAdminSettingsUpdate(id: number, globalPreference: GlobalPreference, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: GlobalPreference;
+    }>(`/api/v1/instance/admin/settings/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: globalPreference
+    }));
+}
+/**
+ * - list preferences
+ * - detail given preference
+ * - batch update preferences
+ * - update a single preference
+ */
+export function instanceAdminSettingsPartialUpdate(id: number, patchedGlobalPreference?: PatchedGlobalPreference, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: GlobalPreference;
+    }>(`/api/v1/instance/admin/settings/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedGlobalPreference
+    }));
+}
+/**
+ * Update multiple preferences at once
+ *
+ * this is a long method because we ensure everything is valid
+ * before actually persisting the changes
+ */
+export function instanceAdminSettingsBulkCreate(globalPreference: GlobalPreference, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: GlobalPreference;
+    }>("/api/v1/instance/admin/settings/bulk/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: globalPreference
+    }));
+}
+export function getApiV1InstanceNodeinfo20(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: NodeInfo20;
+    }>("/api/v1/instance/nodeinfo/2.0/", {
+        ...opts
+    });
+}
+export function instanceSettingsRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: GlobalPreference;
+    }>("/api/v1/instance/settings/", {
+        ...opts
+    });
+}
+export function getApiV1InstanceSpaManifestJson(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/instance/spa-manifest.json", {
+        ...opts
+    });
+}
+export function librariesList({ ordering, page, pageSize, privacyLevel, q, scope }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    privacyLevel?: "everyone" | "instance" | "me";
+    q?: string;
+    scope?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedLibraryForOwnerList;
+    }>(`/api/v1/libraries/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize,
+        privacy_level: privacyLevel,
+        q,
+        scope
+    }))}`, {
+        ...opts
+    });
+}
+export function librariesCreate(libraryForOwner: LibraryForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: LibraryForOwner;
+    }>("/api/v1/libraries/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: libraryForOwner
+    }));
+}
+export function librariesRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryForOwner;
+    }>(`/api/v1/libraries/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function librariesUpdate(uuid: string, libraryForOwner: LibraryForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryForOwner;
+    }>(`/api/v1/libraries/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: libraryForOwner
+    }));
+}
+export function librariesPartialUpdate(uuid: string, patchedLibraryForOwner?: PatchedLibraryForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryForOwner;
+    }>(`/api/v1/libraries/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedLibraryForOwner
+    }));
+}
+export function librariesDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/libraries/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function librariesFollowsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryForOwner;
+    }>(`/api/v1/libraries/${encodeURIComponent(uuid)}/follows/`, {
+        ...opts
+    });
+}
+export function librariesFsImportRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryForOwner;
+    }>("/api/v1/libraries/fs-import/", {
+        ...opts
+    });
+}
+export function librariesFsImportCreate(libraryForOwner: LibraryForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: LibraryForOwner;
+    }>("/api/v1/libraries/fs-import/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: libraryForOwner
+    }));
+}
+export function librariesFsImportDestroy(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/libraries/fs-import/", {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function licensesList({ ordering, page, pageSize }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedLicenseList;
+    }>(`/api/v1/licenses/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function licensesRetrieve(code: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: License;
+    }>(`/api/v1/licenses/${encodeURIComponent(code)}/`, {
+        ...opts
+    });
+}
+export function listenRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Track;
+    }>(`/api/v1/listen/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function manageAccountsList({ domain, local, manuallyApprovesFollowers, ordering, page, pageSize, q, type }: {
+    domain?: string;
+    local?: boolean;
+    manuallyApprovesFollowers?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    "type"?: "Application" | "Group" | "Organization" | "Person" | "Service" | "Tombstone";
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageActorList;
+    }>(`/api/v1/manage/accounts/${QS.query(QS.explode({
+        domain,
+        local,
+        manually_approves_followers: manuallyApprovesFollowers,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        type
+    }))}`, {
+        ...opts
+    });
+}
+export function manageAccountsRetrieve(id: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageActor;
+    }>(`/api/v1/manage/accounts/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function manageAccountsStatsRetrieve(id: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageActor;
+    }>(`/api/v1/manage/accounts/${encodeURIComponent(id)}/stats/`, {
+        ...opts
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageAccountsActionCreate(manageActor: ManageActor, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageActor;
+    }>("/api/v1/manage/accounts/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageActor
+    }));
+}
+export function manageChannelsList({ ordering, page, pageSize, q }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageChannelList;
+    }>(`/api/v1/manage/channels/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize,
+        q
+    }))}`, {
+        ...opts
+    });
+}
+export function manageChannelsRetrieve(composite: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageChannel;
+    }>(`/api/v1/manage/channels/${encodeURIComponent(composite)}/`, {
+        ...opts
+    });
+}
+export function manageChannelsDestroy(composite: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/channels/${encodeURIComponent(composite)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function manageChannelsStatsRetrieve(composite: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageChannel;
+    }>(`/api/v1/manage/channels/${encodeURIComponent(composite)}/stats/`, {
+        ...opts
+    });
+}
+export function manageFederationDomainsList({ allowed, name, ordering, page, pageSize, q }: {
+    allowed?: boolean;
+    name?: string;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageDomainList;
+    }>(`/api/v1/manage/federation/domains/${QS.query(QS.explode({
+        allowed,
+        name,
+        ordering,
+        page,
+        page_size: pageSize,
+        q
+    }))}`, {
+        ...opts
+    });
+}
+export function manageFederationDomainsCreate(manageDomain: ManageDomain, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: ManageDomain;
+    }>("/api/v1/manage/federation/domains/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageDomain
+    }));
+}
+export function manageFederationDomainsRetrieve(name: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageDomain;
+    }>(`/api/v1/manage/federation/domains/${encodeURIComponent(name)}/`, {
+        ...opts
+    });
+}
+export function manageFederationDomainsUpdate(name: string, manageDomainUpdate?: ManageDomainUpdate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageDomainUpdate;
+    }>(`/api/v1/manage/federation/domains/${encodeURIComponent(name)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: manageDomainUpdate
+    }));
+}
+export function manageFederationDomainsPartialUpdate(name: string, patchedManageDomainUpdate?: PatchedManageDomainUpdate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageDomainUpdate;
+    }>(`/api/v1/manage/federation/domains/${encodeURIComponent(name)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedManageDomainUpdate
+    }));
+}
+export function manageFederationDomainsNodeinfoRetrieve(name: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageDomain;
+    }>(`/api/v1/manage/federation/domains/${encodeURIComponent(name)}/nodeinfo/`, {
+        ...opts
+    });
+}
+export function manageFederationDomainsStatsRetrieve(name: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageDomain;
+    }>(`/api/v1/manage/federation/domains/${encodeURIComponent(name)}/stats/`, {
+        ...opts
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageFederationDomainsActionCreate(manageDomain: ManageDomain, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageDomain;
+    }>("/api/v1/manage/federation/domains/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageDomain
+    }));
+}
+export function manageLibraryAlbumsList({ artist, fid, mbid, ordering, page, pageSize, q, title }: {
+    artist?: number;
+    fid?: string;
+    mbid?: string;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    title?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageAlbumList;
+    }>(`/api/v1/manage/library/albums/${QS.query(QS.explode({
+        artist,
+        fid,
+        mbid,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        title
+    }))}`, {
+        ...opts
+    });
+}
+export function manageLibraryAlbumsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageAlbum;
+    }>(`/api/v1/manage/library/albums/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function manageLibraryAlbumsDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/library/albums/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function manageLibraryAlbumsStatsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageAlbum;
+    }>(`/api/v1/manage/library/albums/${encodeURIComponent(id)}/stats/`, {
+        ...opts
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageLibraryAlbumsActionCreate(manageAlbum: ManageAlbum, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageAlbum;
+    }>("/api/v1/manage/library/albums/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageAlbum
+    }));
+}
+export function manageLibraryArtistsList({ contentCategory, fid, mbid, name, ordering, page, pageSize, q }: {
+    contentCategory?: "music" | "other" | "podcast";
+    fid?: string;
+    mbid?: string;
+    name?: string;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageArtistList;
+    }>(`/api/v1/manage/library/artists/${QS.query(QS.explode({
+        content_category: contentCategory,
+        fid,
+        mbid,
+        name,
+        ordering,
+        page,
+        page_size: pageSize,
+        q
+    }))}`, {
+        ...opts
+    });
+}
+export function manageLibraryArtistsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageArtist;
+    }>(`/api/v1/manage/library/artists/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function manageLibraryArtistsDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/library/artists/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function manageLibraryArtistsStatsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageArtist;
+    }>(`/api/v1/manage/library/artists/${encodeURIComponent(id)}/stats/`, {
+        ...opts
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageLibraryArtistsActionCreate(manageArtist: ManageArtist, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageArtist;
+    }>("/api/v1/manage/library/artists/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageArtist
+    }));
+}
+export function manageLibraryLibrariesList({ domain, fid, name, ordering, page, pageSize, privacyLevel, q }: {
+    domain?: string;
+    fid?: string;
+    name?: string;
+    ordering?: ("-creation_date" | "-followers_count" | "-uploads_count" | "creation_date" | "followers_count" | "uploads_count")[];
+    page?: number;
+    pageSize?: number;
+    privacyLevel?: "everyone" | "instance" | "me";
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageLibraryList;
+    }>(`/api/v1/manage/library/libraries/${QS.query(QS.explode({
+        domain,
+        fid,
+        name,
+        page,
+        page_size: pageSize,
+        privacy_level: privacyLevel,
+        q
+    }), QS.form({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+export function manageLibraryLibrariesRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageLibrary;
+    }>(`/api/v1/manage/library/libraries/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function manageLibraryLibrariesUpdate(uuid: string, manageLibrary: ManageLibrary, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageLibrary;
+    }>(`/api/v1/manage/library/libraries/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: manageLibrary
+    }));
+}
+export function manageLibraryLibrariesPartialUpdate(uuid: string, patchedManageLibrary?: PatchedManageLibrary, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageLibrary;
+    }>(`/api/v1/manage/library/libraries/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedManageLibrary
+    }));
+}
+export function manageLibraryLibrariesDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/library/libraries/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function manageLibraryLibrariesStatsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageLibrary;
+    }>(`/api/v1/manage/library/libraries/${encodeURIComponent(uuid)}/stats/`, {
+        ...opts
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageLibraryLibrariesActionCreate(manageLibrary: ManageLibrary, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageLibrary;
+    }>("/api/v1/manage/library/libraries/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageLibrary
+    }));
+}
+export function manageLibraryTracksList({ album, artist, fid, license, mbid, ordering, page, pageSize, q, title }: {
+    album?: number;
+    artist?: number;
+    fid?: string;
+    license?: string;
+    mbid?: string;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    title?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageTrackList;
+    }>(`/api/v1/manage/library/tracks/${QS.query(QS.explode({
+        album,
+        artist,
+        fid,
+        license,
+        mbid,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        title
+    }))}`, {
+        ...opts
+    });
+}
+export function manageLibraryTracksRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageTrack;
+    }>(`/api/v1/manage/library/tracks/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function manageLibraryTracksDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/library/tracks/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function manageLibraryTracksStatsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageTrack;
+    }>(`/api/v1/manage/library/tracks/${encodeURIComponent(id)}/stats/`, {
+        ...opts
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageLibraryTracksActionCreate(manageTrack: ManageTrack, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageTrack;
+    }>("/api/v1/manage/library/tracks/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageTrack
+    }));
+}
+export function manageLibraryUploadsList({ domain, fid, importReference, importStatus, mimetype, ordering, page, pageSize, privacyLevel, q }: {
+    domain?: string;
+    fid?: string;
+    importReference?: string;
+    importStatus?: "draft" | "errored" | "finished" | "pending" | "skipped";
+    mimetype?: string;
+    ordering?: ("-accessed_date" | "-bitrate" | "-creation_date" | "-duration" | "-modification_date" | "-size" | "accessed_date" | "bitrate" | "creation_date" | "duration" | "modification_date" | "size")[];
+    page?: number;
+    pageSize?: number;
+    privacyLevel?: string;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageUploadList;
+    }>(`/api/v1/manage/library/uploads/${QS.query(QS.explode({
+        domain,
+        fid,
+        import_reference: importReference,
+        import_status: importStatus,
+        mimetype,
+        page,
+        page_size: pageSize,
+        privacy_level: privacyLevel,
+        q
+    }), QS.form({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+export function manageLibraryUploadsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUpload;
+    }>(`/api/v1/manage/library/uploads/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function manageLibraryUploadsDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/library/uploads/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageLibraryUploadsActionCreate(manageUpload: ManageUpload, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUpload;
+    }>("/api/v1/manage/library/uploads/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageUpload
+    }));
+}
+export function manageModerationInstancePoliciesList({ blockAll, ordering, page, pageSize, q, rejectMedia, silenceActivity, silenceNotifications, targetAccountDomain, targetAccountUsername, targetDomain }: {
+    blockAll?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    rejectMedia?: boolean;
+    silenceActivity?: boolean;
+    silenceNotifications?: boolean;
+    targetAccountDomain?: string;
+    targetAccountUsername?: string;
+    targetDomain?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageInstancePolicyList;
+    }>(`/api/v1/manage/moderation/instance-policies/${QS.query(QS.explode({
+        block_all: blockAll,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        reject_media: rejectMedia,
+        silence_activity: silenceActivity,
+        silence_notifications: silenceNotifications,
+        target_account_domain: targetAccountDomain,
+        target_account_username: targetAccountUsername,
+        target_domain: targetDomain
+    }))}`, {
+        ...opts
+    });
+}
+export function manageModerationInstancePoliciesCreate(manageInstancePolicy: ManageInstancePolicy, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: ManageInstancePolicy;
+    }>("/api/v1/manage/moderation/instance-policies/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageInstancePolicy
+    }));
+}
+export function manageModerationInstancePoliciesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageInstancePolicy;
+    }>(`/api/v1/manage/moderation/instance-policies/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function manageModerationInstancePoliciesUpdate(id: number, manageInstancePolicy: ManageInstancePolicy, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageInstancePolicy;
+    }>(`/api/v1/manage/moderation/instance-policies/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: manageInstancePolicy
+    }));
+}
+export function manageModerationInstancePoliciesPartialUpdate(id: number, patchedManageInstancePolicy?: PatchedManageInstancePolicy, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageInstancePolicy;
+    }>(`/api/v1/manage/moderation/instance-policies/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedManageInstancePolicy
+    }));
+}
+export function manageModerationInstancePoliciesDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/moderation/instance-policies/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function manageModerationNotesList({ ordering, page, pageSize, q }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageNoteList;
+    }>(`/api/v1/manage/moderation/notes/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize,
+        q
+    }))}`, {
+        ...opts
+    });
+}
+export function manageModerationNotesCreate(manageNote: ManageNote, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: ManageNote;
+    }>("/api/v1/manage/moderation/notes/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageNote
+    }));
+}
+export function manageModerationNotesRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageNote;
+    }>(`/api/v1/manage/moderation/notes/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function manageModerationNotesDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/moderation/notes/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function manageModerationReportsList({ isHandled, ordering, page, pageSize, q, submitterEmail, type }: {
+    isHandled?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    submitterEmail?: string;
+    "type"?: "illegal_content" | "invalid_metadata" | "offensive_content" | "other" | "takedown_request";
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageReportList;
+    }>(`/api/v1/manage/moderation/reports/${QS.query(QS.explode({
+        is_handled: isHandled,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        submitter_email: submitterEmail,
+        type
+    }))}`, {
+        ...opts
+    });
+}
+export function manageModerationReportsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageReport;
+    }>(`/api/v1/manage/moderation/reports/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function manageModerationReportsUpdate(uuid: string, manageReport: ManageReport, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageReport;
+    }>(`/api/v1/manage/moderation/reports/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: manageReport
+    }));
+}
+export function manageModerationReportsPartialUpdate(uuid: string, patchedManageReport?: PatchedManageReport, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageReport;
+    }>(`/api/v1/manage/moderation/reports/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedManageReport
+    }));
+}
+export function manageModerationRequestsList({ ordering, page, pageSize, q, status, type }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    status?: "approved" | "pending" | "refused";
+    "type"?: "signup";
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageUserRequestList;
+    }>(`/api/v1/manage/moderation/requests/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        status,
+        type
+    }))}`, {
+        ...opts
+    });
+}
+export function manageModerationRequestsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUserRequest;
+    }>(`/api/v1/manage/moderation/requests/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function manageModerationRequestsUpdate(uuid: string, manageUserRequest: ManageUserRequest, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUserRequest;
+    }>(`/api/v1/manage/moderation/requests/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: manageUserRequest
+    }));
+}
+export function manageModerationRequestsPartialUpdate(uuid: string, patchedManageUserRequest?: PatchedManageUserRequest, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUserRequest;
+    }>(`/api/v1/manage/moderation/requests/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedManageUserRequest
+    }));
+}
+export function manageTagsList({ ordering, page, pageSize, q }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageTagList;
+    }>(`/api/v1/manage/tags/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize,
+        q
+    }))}`, {
+        ...opts
+    });
+}
+export function manageTagsCreate(manageTag: ManageTag, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: ManageTag;
+    }>("/api/v1/manage/tags/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageTag
+    }));
+}
+export function manageTagsRetrieve(name: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageTag;
+    }>(`/api/v1/manage/tags/${encodeURIComponent(name)}/`, {
+        ...opts
+    });
+}
+export function manageTagsDestroy(name: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/manage/tags/${encodeURIComponent(name)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageTagsActionCreate(manageTag: ManageTag, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageTag;
+    }>("/api/v1/manage/tags/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageTag
+    }));
+}
+export function manageUsersInvitationsList({ isOpen, ordering, page, pageSize, q }: {
+    isOpen?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageInvitationList;
+    }>(`/api/v1/manage/users/invitations/${QS.query(QS.explode({
+        is_open: isOpen,
+        ordering,
+        page,
+        page_size: pageSize,
+        q
+    }))}`, {
+        ...opts
+    });
+}
+export function manageUsersInvitationsCreate(manageInvitation?: ManageInvitation, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: ManageInvitation;
+    }>("/api/v1/manage/users/invitations/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageInvitation
+    }));
+}
+export function manageUsersInvitationsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageInvitation;
+    }>(`/api/v1/manage/users/invitations/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function manageUsersInvitationsUpdate(id: number, manageInvitation?: ManageInvitation, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageInvitation;
+    }>(`/api/v1/manage/users/invitations/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: manageInvitation
+    }));
+}
+export function manageUsersInvitationsPartialUpdate(id: number, patchedManageInvitation?: PatchedManageInvitation, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageInvitation;
+    }>(`/api/v1/manage/users/invitations/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedManageInvitation
+    }));
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function manageUsersInvitationsActionCreate(manageInvitation?: ManageInvitation, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageInvitation;
+    }>("/api/v1/manage/users/invitations/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: manageInvitation
+    }));
+}
+export function manageUsersUsersList({ isActive, isStaff, isSuperuser, ordering, page, pageSize, permissionLibrary, permissionModeration, permissionSettings, privacyLevel, q }: {
+    isActive?: boolean;
+    isStaff?: boolean;
+    isSuperuser?: boolean;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    permissionLibrary?: boolean;
+    permissionModeration?: boolean;
+    permissionSettings?: boolean;
+    privacyLevel?: "everyone" | "followers" | "instance" | "me";
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedManageUserList;
+    }>(`/api/v1/manage/users/users/${QS.query(QS.explode({
+        is_active: isActive,
+        is_staff: isStaff,
+        is_superuser: isSuperuser,
+        ordering,
+        page,
+        page_size: pageSize,
+        permission_library: permissionLibrary,
+        permission_moderation: permissionModeration,
+        permission_settings: permissionSettings,
+        privacy_level: privacyLevel,
+        q
+    }))}`, {
+        ...opts
+    });
+}
+export function manageUsersUsersRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUser;
+    }>(`/api/v1/manage/users/users/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function manageUsersUsersUpdate(id: number, manageUser: ManageUser, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUser;
+    }>(`/api/v1/manage/users/users/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: manageUser
+    }));
+}
+export function manageUsersUsersPartialUpdate(id: number, patchedManageUser?: PatchedManageUser, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ManageUser;
+    }>(`/api/v1/manage/users/users/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedManageUser
+    }));
+}
+export function moderationContentFiltersList({ ordering, page, pageSize }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedUserFilterList;
+    }>(`/api/v1/moderation/content-filters/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function moderationContentFiltersCreate(userFilter: UserFilter, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: UserFilter;
+    }>("/api/v1/moderation/content-filters/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userFilter
+    }));
+}
+export function moderationContentFiltersRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserFilter;
+    }>(`/api/v1/moderation/content-filters/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function moderationContentFiltersDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/moderation/content-filters/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function moderationReportsCreate(report: Report, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: Report;
+    }>("/api/v1/moderation/reports/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: report
+    }));
+}
+export function mutationsList({ isApplied, isApproved, ordering, page, pageSize, q, type }: {
+    isApplied?: boolean;
+    isApproved?: ("0" | "1" | false | "False" | "None" | "Null" | true | "True" | "false" | "no" | "none" | "null" | "true" | "yes") | null;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    "type"?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedApiMutationList;
+    }>(`/api/v1/mutations/${QS.query(QS.explode({
+        is_applied: isApplied,
+        is_approved: isApproved,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        type
+    }))}`, {
+        ...opts
+    });
+}
+export function mutationsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ApiMutation;
+    }>(`/api/v1/mutations/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function mutationsDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/mutations/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function mutationsApproveCreate(uuid: string, apiMutation: ApiMutation, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ApiMutation;
+    }>(`/api/v1/mutations/${encodeURIComponent(uuid)}/approve/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: apiMutation
+    }));
+}
+export function mutationsRejectCreate(uuid: string, apiMutation: ApiMutation, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: ApiMutation;
+    }>(`/api/v1/mutations/${encodeURIComponent(uuid)}/reject/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: apiMutation
+    }));
+}
+export function oauthAppsList({ ordering, page, pageSize }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedApplicationList;
+    }>(`/api/v1/oauth/apps/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function oauthAppsCreate(createApplication: CreateApplication, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: CreateApplication;
+    }>("/api/v1/oauth/apps/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: createApplication
+    }));
+}
+export function oauthAppsRetrieve(clientId: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Application;
+    }>(`/api/v1/oauth/apps/${encodeURIComponent(clientId)}/`, {
+        ...opts
+    });
+}
+export function oauthAppsUpdate(clientId: string, application: Application, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Application;
+    }>(`/api/v1/oauth/apps/${encodeURIComponent(clientId)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: application
+    }));
+}
+export function oauthAppsPartialUpdate(clientId: string, patchedApplication?: PatchedApplication, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Application;
+    }>(`/api/v1/oauth/apps/${encodeURIComponent(clientId)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedApplication
+    }));
+}
+export function oauthAppsDestroy(clientId: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/oauth/apps/${encodeURIComponent(clientId)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function oauthAppsRefreshTokenCreate(clientId: string, createApplication: CreateApplication, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: CreateApplication;
+    }>(`/api/v1/oauth/apps/${encodeURIComponent(clientId)}/refresh-token/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: createApplication
+    }));
+}
+/**
+ * Handle GET requests: instantiate a blank version of the form.
+ */
+export function oauthAuthorizeRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/oauth/authorize/", {
+        ...opts
+    });
+}
+/**
+ * Handle POST requests: instantiate a form instance with the passed
+ * POST variables and then check if it's valid.
+ */
+export function oauthAuthorizeCreate(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/oauth/authorize/", {
+        ...opts,
+        method: "POST"
+    });
+}
+export function oauthAuthorizeUpdate(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/oauth/authorize/", {
+        ...opts,
+        method: "PUT"
+    });
+}
+/**
+ * This is a viewset that list applications that have access to the request user
+ * account, to allow revoking tokens easily.
+ */
+export function oauthGrantsList({ ordering }: {
+    ordering?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Application[];
+    }>(`/api/v1/oauth/grants/${QS.query(QS.explode({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+/**
+ * This is a viewset that list applications that have access to the request user
+ * account, to allow revoking tokens easily.
+ */
+export function oauthGrantsRetrieve(clientId: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Application;
+    }>(`/api/v1/oauth/grants/${encodeURIComponent(clientId)}/`, {
+        ...opts
+    });
+}
+/**
+ * This is a viewset that list applications that have access to the request user
+ * account, to allow revoking tokens easily.
+ */
+export function oauthGrantsDestroy(clientId: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/oauth/grants/${encodeURIComponent(clientId)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function oembedRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/oembed/", {
+        ...opts
+    });
+}
+export function playlistsList({ album, artist, name, nameIcontains, ordering, page, pageSize, playable, q, scope, track }: {
+    album?: number;
+    artist?: number;
+    name?: string;
+    nameIcontains?: string;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    playable?: boolean;
+    q?: string;
+    scope?: string;
+    track?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedPlaylistList;
+    }>(`/api/v1/playlists/${QS.query(QS.explode({
+        album,
+        artist,
+        name,
+        name__icontains: nameIcontains,
+        ordering,
+        page,
+        page_size: pageSize,
+        playable,
+        q,
+        scope,
+        track
+    }))}`, {
+        ...opts
+    });
+}
+export function playlistsCreate(playlist: Playlist, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: Playlist;
+    }>("/api/v1/playlists/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: playlist
+    }));
+}
+export function playlistsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Playlist;
+    }>(`/api/v1/playlists/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function playlistsUpdate(id: number, playlist: Playlist, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Playlist;
+    }>(`/api/v1/playlists/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: playlist
+    }));
+}
+export function playlistsPartialUpdate(id: number, patchedPlaylist?: PatchedPlaylist, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Playlist;
+    }>(`/api/v1/playlists/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedPlaylist
+    }));
+}
+export function playlistsDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/playlists/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function playlistsAddCreate(id: number, playlist: Playlist, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Playlist;
+    }>(`/api/v1/playlists/${encodeURIComponent(id)}/add/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: playlist
+    }));
+}
+export function playlistsClearDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/playlists/${encodeURIComponent(id)}/clear/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function playlistsMoveCreate(id: number, playlist: Playlist, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Playlist;
+    }>(`/api/v1/playlists/${encodeURIComponent(id)}/move/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: playlist
+    }));
+}
+export function playlistsRemoveCreate(id: number, playlist: Playlist, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Playlist;
+    }>(`/api/v1/playlists/${encodeURIComponent(id)}/remove/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: playlist
+    }));
+}
+export function playlistsRemoveDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/playlists/${encodeURIComponent(id)}/remove/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function playlistsTracksRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Playlist;
+    }>(`/api/v1/playlists/${encodeURIComponent(id)}/tracks/`, {
+        ...opts
+    });
+}
+export function pluginsList({ ordering, page, pageSize }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/plugins/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function pluginsCreate(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/plugins/", {
+        ...opts,
+        method: "POST"
+    });
+}
+export function pluginsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/plugins/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function pluginsDisableCreate(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/plugins/${encodeURIComponent(id)}/disable/`, {
+        ...opts,
+        method: "POST"
+    });
+}
+export function pluginsEnableCreate(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/plugins/${encodeURIComponent(id)}/enable/`, {
+        ...opts,
+        method: "POST"
+    });
+}
+export function pluginsScanCreate(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/plugins/${encodeURIComponent(id)}/scan/`, {
+        ...opts,
+        method: "POST"
+    });
+}
+export function radiosRadiosList({ name, nameIcontains, nameIexact, nameStartswith, ordering, page, pageSize, q, scope }: {
+    name?: string;
+    nameIcontains?: string;
+    nameIexact?: string;
+    nameStartswith?: string;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    q?: string;
+    scope?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedRadioList;
+    }>(`/api/v1/radios/radios/${QS.query(QS.explode({
+        name,
+        name__icontains: nameIcontains,
+        name__iexact: nameIexact,
+        name__startswith: nameStartswith,
+        ordering,
+        page,
+        page_size: pageSize,
+        q,
+        scope
+    }))}`, {
+        ...opts
+    });
+}
+export function radiosRadiosCreate(radio: Radio, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: Radio;
+    }>("/api/v1/radios/radios/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: radio
+    }));
+}
+export function radiosRadiosRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Radio;
+    }>(`/api/v1/radios/radios/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function radiosRadiosUpdate(id: number, radio: Radio, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Radio;
+    }>(`/api/v1/radios/radios/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: radio
+    }));
+}
+export function radiosRadiosPartialUpdate(id: number, patchedRadio?: PatchedRadio, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Radio;
+    }>(`/api/v1/radios/radios/${encodeURIComponent(id)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedRadio
+    }));
+}
+export function radiosRadiosDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/radios/radios/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function radiosRadiosTracksRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Radio;
+    }>(`/api/v1/radios/radios/${encodeURIComponent(id)}/tracks/`, {
+        ...opts
+    });
+}
+export function radiosRadiosFiltersRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Radio;
+    }>("/api/v1/radios/radios/filters/", {
+        ...opts
+    });
+}
+export function radiosRadiosValidateCreate(radio: Radio, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Radio;
+    }>("/api/v1/radios/radios/validate/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: radio
+    }));
+}
+export function radiosSessionsCreate(radioSession: RadioSession, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: RadioSession;
+    }>("/api/v1/radios/sessions/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: radioSession
+    }));
+}
+export function radiosSessionsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: RadioSession;
+    }>(`/api/v1/radios/sessions/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+export function radiosTracksCreate(radioSessionTrackSerializerCreate: RadioSessionTrackSerializerCreate, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: RadioSessionTrackSerializerCreate;
+    }>("/api/v1/radios/tracks/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: radioSessionTrackSerializerCreate
+    }));
+}
+export function rateLimitRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: RateLimit;
+    }>("/api/v1/rate-limit/", {
+        ...opts
+    });
+}
+export function searchRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/search", {
+        ...opts
+    });
+}
+export function streamRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchBlob<{
+        status: 200;
+        data: Blob;
+    }>(`/api/v1/stream/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function subscriptionsList({ ordering, page, pageSize }: {
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedSubscriptionList;
+    }>(`/api/v1/subscriptions/${QS.query(QS.explode({
+        ordering,
+        page,
+        page_size: pageSize
+    }))}`, {
+        ...opts
+    });
+}
+export function subscriptionsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Subscription;
+    }>(`/api/v1/subscriptions/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+/**
+ * Return all the subscriptions of the current user, with only limited data
+ * to have a performant endpoint and avoid lots of queries just to display
+ * subscription status in the UI
+ */
+export function subscriptionsAllRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Subscription;
+    }>("/api/v1/subscriptions/all/", {
+        ...opts
+    });
+}
+export function tagsList({ name, nameStartswith, ordering, page, pageSize, q }: {
+    name?: string;
+    nameStartswith?: string;
+    ordering?: ("-creation_date" | "-length" | "-name" | "creation_date" | "length" | "name")[];
+    page?: number;
+    pageSize?: number;
+    q?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedTagList;
+    }>(`/api/v1/tags/${QS.query(QS.explode({
+        name,
+        name__startswith: nameStartswith,
+        page,
+        page_size: pageSize,
+        q
+    }), QS.form({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+export function tagsRetrieve(name: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Tag;
+    }>(`/api/v1/tags/${encodeURIComponent(name)}/`, {
+        ...opts
+    });
+}
+export function textPreviewCreate(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/text-preview/", {
+        ...opts,
+        method: "POST"
+    });
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksList({ album, artist, channel, hidden, id, includeChannels, library, license, mbid, ordering, page, pageSize, playable, q, related, scope, tag, title, titleIcontains, titleIexact, titleStartswith }: {
+    album?: number;
+    artist?: string;
+    channel?: string;
+    hidden?: boolean;
+    id?: number[];
+    includeChannels?: boolean;
+    library?: string;
+    license?: string;
+    mbid?: string;
+    ordering?: ("-album__release_date" | "-album__title" | "-artist__modification_date" | "-artist__name" | "-creation_date" | "-disc_number" | "-position" | "-random" | "-related" | "-size" | "-title" | "album__release_date" | "album__title" | "artist__modification_date" | "artist__name" | "creation_date" | "disc_number" | "position" | "random" | "related" | "size" | "title")[];
+    page?: number;
+    pageSize?: number;
+    playable?: boolean;
+    q?: string;
+    related?: string;
+    scope?: string;
+    tag?: string[];
+    title?: string;
+    titleIcontains?: string;
+    titleIexact?: string;
+    titleStartswith?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedTrackList;
+    }>(`/api/v1/tracks/${QS.query(QS.explode({
+        album,
+        artist,
+        channel,
+        hidden,
+        id,
+        include_channels: includeChannels,
+        library,
+        license,
+        mbid,
+        page,
+        page_size: pageSize,
+        playable,
+        q,
+        related,
+        scope,
+        tag,
+        title,
+        title__icontains: titleIcontains,
+        title__iexact: titleIexact,
+        title__startswith: titleStartswith
+    }), QS.form({
+        ordering
+    }))}`, {
+        ...opts
+    });
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Track;
+    }>(`/api/v1/tracks/${encodeURIComponent(id)}/`, {
+        ...opts
+    });
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksDestroy(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/tracks/${encodeURIComponent(id)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksFetchesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Track;
+    }>(`/api/v1/tracks/${encodeURIComponent(id)}/fetches/`, {
+        ...opts
+    });
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksFetchesCreate(id: number, track: Track, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Track;
+    }>(`/api/v1/tracks/${encodeURIComponent(id)}/fetches/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: track
+    }));
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksLibrariesRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Track;
+    }>(`/api/v1/tracks/${encodeURIComponent(id)}/libraries/`, {
+        ...opts
+    });
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksMutationsRetrieve(id: number, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Track;
+    }>(`/api/v1/tracks/${encodeURIComponent(id)}/mutations/`, {
+        ...opts
+    });
+}
+/**
+ * A simple ViewSet for viewing and editing accounts.
+ */
+export function tracksMutationsCreate(id: number, track: Track, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: Track;
+    }>(`/api/v1/tracks/${encodeURIComponent(id)}/mutations/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: track
+    }));
+}
+export function uploadsList({ albumArtist, channel, importReference, importStatus, includeChannels, library, mimetype, ordering, page, pageSize, playable, q, scope, track, trackArtist }: {
+    albumArtist?: string;
+    channel?: string;
+    importReference?: string;
+    importStatus?: ("draft" | "errored" | "finished" | "pending" | "skipped")[];
+    includeChannels?: boolean;
+    library?: string;
+    mimetype?: string;
+    ordering?: string;
+    page?: number;
+    pageSize?: number;
+    playable?: boolean;
+    q?: string;
+    scope?: string;
+    track?: string;
+    trackArtist?: string;
+} = {}, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: PaginatedUploadForOwnerList;
+    }>(`/api/v1/uploads/${QS.query(QS.explode({
+        album_artist: albumArtist,
+        channel,
+        import_reference: importReference,
+        import_status: importStatus,
+        include_channels: includeChannels,
+        library,
+        mimetype,
+        ordering,
+        page,
+        page_size: pageSize,
+        playable,
+        q,
+        scope,
+        track,
+        track_artist: trackArtist
+    }))}`, {
+        ...opts
+    });
+}
+export function uploadsCreate(uploadForOwner: UploadForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 201;
+        data: UploadForOwner;
+    }>("/api/v1/uploads/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: uploadForOwner
+    }));
+}
+export function uploadsRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UploadForOwner;
+    }>(`/api/v1/uploads/${encodeURIComponent(uuid)}/`, {
+        ...opts
+    });
+}
+export function uploadsUpdate(uuid: string, uploadForOwner: UploadForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UploadForOwner;
+    }>(`/api/v1/uploads/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: uploadForOwner
+    }));
+}
+export function uploadsPartialUpdate(uuid: string, patchedUploadForOwner?: PatchedUploadForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UploadForOwner;
+    }>(`/api/v1/uploads/${encodeURIComponent(uuid)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedUploadForOwner
+    }));
+}
+export function uploadsDestroy(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/uploads/${encodeURIComponent(uuid)}/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function uploadsAudioFileMetadataRetrieve(uuid: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UploadForOwner;
+    }>(`/api/v1/uploads/${encodeURIComponent(uuid)}/audio-file-metadata/`, {
+        ...opts
+    });
+}
+/**
+ * str(object='') -> str
+ * str(bytes_or_buffer[, encoding[, errors]]) -> str
+ *
+ * Create a new string object from the given object. If encoding or
+ * errors is specified, then the object must expose a data buffer
+ * that will be decoded using the given encoding and error handler.
+ * Otherwise, returns the result of object.__str__() (if defined)
+ * or repr(object).
+ * encoding defaults to sys.getdefaultencoding().
+ * errors defaults to 'strict'.
+ */
+export function uploadsActionCreate(uploadForOwner: UploadForOwner, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UploadForOwner;
+    }>("/api/v1/uploads/action/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: uploadForOwner
+    }));
+}
+export function usersUpdate(username: string, userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/${encodeURIComponent(username)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: userWrite
+    }));
+}
+export function usersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/${encodeURIComponent(username)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedUserWrite
+    }));
+}
+export function usersSubsonicTokenRetrieve(username: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/${encodeURIComponent(username)}/subsonic-token/`, {
+        ...opts
+    });
+}
+export function usersSubsonicTokenCreate(username: string, userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/${encodeURIComponent(username)}/subsonic-token/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userWrite
+    }));
+}
+export function usersSubsonicTokenDestroy(username: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/users/${encodeURIComponent(username)}/subsonic-token/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function usersChangeEmailCreate(userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>("/api/v1/users/change-email/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userWrite
+    }));
+}
+/**
+ * Return information about the current user or delete it
+ */
+export function usersMeRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>("/api/v1/users/me/", {
+        ...opts
+    });
+}
+/**
+ * Return information about the current user or delete it
+ */
+export function usersMeDestroy(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/users/me/", {
+        ...opts,
+        method: "DELETE"
+    });
+}
+/**
+ * Return information about the current user or delete it
+ */
+export function usersSettingsCreate(userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>("/api/v1/users/settings/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userWrite
+    }));
+}
+export function usersUsersUpdate(username: string, userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/users/${encodeURIComponent(username)}/`, oazapfts.json({
+        ...opts,
+        method: "PUT",
+        body: userWrite
+    }));
+}
+export function usersUsersPartialUpdate(username: string, patchedUserWrite?: PatchedUserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/users/${encodeURIComponent(username)}/`, oazapfts.json({
+        ...opts,
+        method: "PATCH",
+        body: patchedUserWrite
+    }));
+}
+export function usersUsersSubsonicTokenRetrieve(username: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/users/${encodeURIComponent(username)}/subsonic-token/`, {
+        ...opts
+    });
+}
+export function usersUsersSubsonicTokenCreate(username: string, userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>(`/api/v1/users/users/${encodeURIComponent(username)}/subsonic-token/`, oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userWrite
+    }));
+}
+export function usersUsersSubsonicTokenDestroy(username: string, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText(`/api/v1/users/users/${encodeURIComponent(username)}/subsonic-token/`, {
+        ...opts,
+        method: "DELETE"
+    });
+}
+export function usersUsersChangeEmailCreate(userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>("/api/v1/users/users/change-email/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userWrite
+    }));
+}
+/**
+ * Return information about the current user or delete it
+ */
+export function usersUsersMeRetrieve(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>("/api/v1/users/users/me/", {
+        ...opts
+    });
+}
+/**
+ * Return information about the current user or delete it
+ */
+export function usersUsersMeDestroy(opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchText("/api/v1/users/users/me/", {
+        ...opts,
+        method: "DELETE"
+    });
+}
+/**
+ * Return information about the current user or delete it
+ */
+export function usersUsersSettingsCreate(userWrite: UserWrite, opts?: Oazapfts.RequestOpts) {
+    return oazapfts.fetchJson<{
+        status: 200;
+        data: UserWrite;
+    }>("/api/v1/users/users/settings/", oazapfts.json({
+        ...opts,
+        method: "POST",
+        body: userWrite
+    }));
+}
diff --git a/src/index.ts b/src/index.ts
new file mode 100644
index 0000000000000000000000000000000000000000..4b34a2e666df6233ea8f0df2ed4feb9cdf6d2162
--- /dev/null
+++ b/src/index.ts
@@ -0,0 +1,3 @@
+export * from './plugins/vuex'
+export * from './plugins/vue'
+export * from './api'
diff --git a/src/plugins/vue.ts b/src/plugins/vue.ts
new file mode 100644
index 0000000000000000000000000000000000000000..20e65778a18c2b3bba7a59b8672ff8d65cf8631a
--- /dev/null
+++ b/src/plugins/vue.ts
@@ -0,0 +1,26 @@
+import { watchEffect, type Plugin } from 'vue'
+
+import { store } from '../store'
+import { defaults } from '../api'
+
+export interface VueAPIOptions {
+  instanceUrl: 'auto' | string
+}
+
+export const createVueAPI = (vuePluginOptions: Partial<VueAPIOptions> = {}): Plugin => ({
+  install (_app) {
+    const options: VueAPIOptions = {
+      instanceUrl: 'auto',
+      ...vuePluginOptions
+    }
+
+    // Set instance url
+    if (options.instanceUrl === 'auto') {
+      watchEffect(() => {
+        defaults.baseUrl = store.instanceUrl
+      })
+    } else {
+      defaults.baseUrl = options.instanceUrl
+    }
+  }
+})
diff --git a/src/plugins/vuex.ts b/src/plugins/vuex.ts
new file mode 100644
index 0000000000000000000000000000000000000000..cc82fc5f8d982d2b21096f685037ffb88174b5b0
--- /dev/null
+++ b/src/plugins/vuex.ts
@@ -0,0 +1,23 @@
+import { type Plugin } from 'vuex'
+
+import { store } from '../store'
+
+export interface VuexAPIOptions {
+  stateKey: 'instanceUrl' | string
+  mutation: 'instanceUrl' | string
+}
+
+export const createVuexAPI = (vuexPluginOptions: Partial<VuexAPIOptions> = {}): Plugin<any> => (vuexStore) => {
+  const options: VuexAPIOptions = {
+    stateKey: 'instanceUrl',
+    mutation: 'instanceUrl',
+    ...vuexPluginOptions
+  }
+
+  store.vuexPluginRegistered = true
+  vuexStore.subscribe((mutation, state) => {
+    if (mutation.type === options.mutation) {
+      store.instanceUrl = state[options.stateKey]
+    }
+  })
+}
diff --git a/src/store.ts b/src/store.ts
new file mode 100644
index 0000000000000000000000000000000000000000..41788b146860eeee4a406d86f51cce30f308faf4
--- /dev/null
+++ b/src/store.ts
@@ -0,0 +1,6 @@
+import { reactive } from 'vue'
+
+export const store = reactive({
+  instanceUrl: window.location.origin,
+  vuexPluginRegistered: false
+})
diff --git a/src/vite-env.d.ts b/src/vite-env.d.ts
new file mode 100644
index 0000000000000000000000000000000000000000..11f02fe2a0061d6e6e1f271b21da95423b448b32
--- /dev/null
+++ b/src/vite-env.d.ts
@@ -0,0 +1 @@
+/// <reference types="vite/client" />
diff --git a/test.ts b/test.ts
new file mode 100644
index 0000000000000000000000000000000000000000..aebf6891c9ca27cc75bf0fe53b7e20229cf2c0f9
--- /dev/null
+++ b/test.ts
@@ -0,0 +1,3 @@
+import { tracksList } from "./src/api";
+
+tracksList({ album: 4837 }).then(({ data }) => console.log(data))
diff --git a/tsconfig.json b/tsconfig.json
index 2f27acb9fd94489db28bb02d7e4007b1cb8e6968..3c03666228571064761a35af10e4cbcc5eac3b9b 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,21 +1,20 @@
 {
   "compilerOptions": {
-    "declaration": true,
-    "target": "es5",
-    "module": "commonjs",
-    "noImplicitAny": true,
-    "outDir": "dist",
-    "rootDir": ".",
-    "lib": [
-      "es6",
-      "dom"
-    ],
-    "typeRoots": [
-      "node_modules/@types"
-    ]
+    "target": "ESNext",
+    "useDefineForClassFields": true,
+    "module": "ESNext",
+    "lib": ["ESNext", "DOM"],
+    "moduleResolution": "Node",
+    "strict": true,
+    "sourceMap": true,
+    "resolveJsonModule": true,
+    "isolatedModules": true,
+    "esModuleInterop": true,
+    "noEmit": true,
+    "noUnusedLocals": true,
+    "noUnusedParameters": true,
+    "noImplicitReturns": true,
+    "skipLibCheck": true
   },
-  "exclude": [
-    "dist",
-    "node_modules"
-  ]
+  "include": ["src", "vite.config.ts"]
 }
diff --git a/types/activity.ts b/types/activity.ts
deleted file mode 100644
index 56152dac500823d451b6d55a10e756b250f975ee..0000000000000000000000000000000000000000
--- a/types/activity.ts
+++ /dev/null
@@ -1,79 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-
-/**
- * 
- * @export
- * @interface Activity
- */
-export interface Activity {
-    /**
-     * 
-     * @type {string}
-     * @memberof Activity
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Activity
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Activity
-     */
-    actor: APIActor;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Activity
-     */
-    payload?: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Activity
-     */
-    object: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Activity
-     */
-    target: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Activity
-     */
-    related_object: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof Activity
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Activity
-     */
-    type?: string | null;
-}
-
-
diff --git a/types/album-create.ts b/types/album-create.ts
deleted file mode 100644
index 2f8ea509b96a4598d4ca6d0c06a7f819cee84723..0000000000000000000000000000000000000000
--- a/types/album-create.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Content } from './content';
-
-/**
- * 
- * @export
- * @interface AlbumCreate
- */
-export interface AlbumCreate {
-    /**
-     * 
-     * @type {string}
-     * @memberof AlbumCreate
-     */
-    cover?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof AlbumCreate
-     */
-    title: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof AlbumCreate
-     */
-    release_date?: string | null;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof AlbumCreate
-     */
-    tags?: Array<string>;
-    /**
-     * 
-     * @type {Content}
-     * @memberof AlbumCreate
-     */
-    description?: Content | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof AlbumCreate
-     */
-    artist: string;
-}
-
-
diff --git a/types/album.ts b/types/album.ts
deleted file mode 100644
index e8da859a1b265e919c42ada9f75fdc83e688bd35..0000000000000000000000000000000000000000
--- a/types/album.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { CoverField } from './cover-field';
-import { SimpleArtist } from './simple-artist';
-
-/**
- * 
- * @export
- * @interface Album
- */
-export interface Album {
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof Album
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {SimpleArtist}
-     * @memberof Album
-     */
-    artist: SimpleArtist;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Album
-     */
-    is_playable: boolean;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof Album
-     */
-    tags: Array<string>;
-    /**
-     * 
-     * @type {number}
-     * @memberof Album
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Album
-     */
-    attributed_to: APIActor;
-    /**
-     * 
-     * @type {number}
-     * @memberof Album
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof Album
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Album
-     */
-    mbid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Album
-     */
-    title: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Album
-     */
-    release_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Album
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Album
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof Album
-     */
-    duration: number;
-}
-
-
diff --git a/types/allow-list-stat.ts b/types/allow-list-stat.ts
deleted file mode 100644
index 93ad33e8c422292457ba39d6bb95aa808f00f08f..0000000000000000000000000000000000000000
--- a/types/allow-list-stat.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface AllowListStat
- */
-export interface AllowListStat {
-    /**
-     * 
-     * @type {boolean}
-     * @memberof AllowListStat
-     */
-    enabled: boolean;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof AllowListStat
-     */
-    domains: Array<string>;
-}
-
-
diff --git a/types/apiactor.ts b/types/apiactor.ts
deleted file mode 100644
index af82467697f8e4397232a677ad849516fd19a32c..0000000000000000000000000000000000000000
--- a/types/apiactor.ts
+++ /dev/null
@@ -1,97 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { FederationChoiceEnum } from './federation-choice-enum';
-
-/**
- * 
- * @export
- * @interface APIActor
- */
-export interface APIActor {
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    preferred_username: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    name?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    last_fetch_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    domain: string;
-    /**
-     * 
-     * @type {FederationChoiceEnum}
-     * @memberof APIActor
-     */
-    type?: FederationChoiceEnum;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof APIActor
-     */
-    manually_approves_followers?: boolean | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIActor
-     */
-    full_username: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof APIActor
-     */
-    is_local: boolean;
-}
-
-
diff --git a/types/apimutation.ts b/types/apimutation.ts
deleted file mode 100644
index 37c04e40208406e258f849be610df5daa286aa5a..0000000000000000000000000000000000000000
--- a/types/apimutation.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-
-/**
- * 
- * @export
- * @interface APIMutation
- */
-export interface APIMutation {
-    /**
-     * 
-     * @type {string}
-     * @memberof APIMutation
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIMutation
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIMutation
-     */
-    type: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIMutation
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIMutation
-     */
-    applied_date?: string | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof APIMutation
-     */
-    is_approved?: boolean | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof APIMutation
-     */
-    is_applied: boolean | null;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof APIMutation
-     */
-    created_by: APIActor;
-    /**
-     * 
-     * @type {number}
-     * @memberof APIMutation
-     */
-    approved_by: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof APIMutation
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof APIMutation
-     */
-    payload: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof APIMutation
-     */
-    previous_state: { [key: string]: any; } | null;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof APIMutation
-     */
-    target: { [key: string]: any; };
-}
-
-
diff --git a/types/application.ts b/types/application.ts
deleted file mode 100644
index 9b55b079a095e35528ec2b54c56fb452fc0444a4..0000000000000000000000000000000000000000
--- a/types/application.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Application
- */
-export interface Application {
-    /**
-     * 
-     * @type {string}
-     * @memberof Application
-     */
-    client_id?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Application
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Application
-     */
-    scopes: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Application
-     */
-    created: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Application
-     */
-    updated: string;
-}
-
-
diff --git a/types/artist-album.ts b/types/artist-album.ts
deleted file mode 100644
index 088777057bf07c676e8cddb40f8a34c6b18a50c3..0000000000000000000000000000000000000000
--- a/types/artist-album.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { CoverField } from './cover-field';
-
-/**
- * 
- * @export
- * @interface ArtistAlbum
- */
-export interface ArtistAlbum {
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof ArtistAlbum
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {number}
-     * @memberof ArtistAlbum
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ArtistAlbum
-     */
-    is_playable: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ArtistAlbum
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof ArtistAlbum
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistAlbum
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistAlbum
-     */
-    mbid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistAlbum
-     */
-    title: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof ArtistAlbum
-     */
-    artist: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistAlbum
-     */
-    release_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistAlbum
-     */
-    creation_date: string;
-}
-
-
diff --git a/types/artist-with-albums.ts b/types/artist-with-albums.ts
deleted file mode 100644
index 1adba1e1b11f1045512e6b2be515063560d70744..0000000000000000000000000000000000000000
--- a/types/artist-with-albums.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { ArtistAlbum } from './artist-album';
-import { CoverField } from './cover-field';
-
-/**
- * 
- * @export
- * @interface ArtistWithAlbums
- */
-export interface ArtistWithAlbums {
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof ArtistWithAlbums
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {Array<ArtistAlbum>}
-     * @memberof ArtistWithAlbums
-     */
-    albums: Array<ArtistAlbum>;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof ArtistWithAlbums
-     */
-    tags: Array<string>;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof ArtistWithAlbums
-     */
-    attributed_to: APIActor;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ArtistWithAlbums
-     */
-    channel: { [key: string]: any; };
-    /**
-     * 
-     * @type {number}
-     * @memberof ArtistWithAlbums
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ArtistWithAlbums
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistWithAlbums
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistWithAlbums
-     */
-    mbid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistWithAlbums
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistWithAlbums
-     */
-    content_category: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ArtistWithAlbums
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ArtistWithAlbums
-     */
-    is_local: boolean;
-}
-
-
diff --git a/types/attachment.ts b/types/attachment.ts
deleted file mode 100644
index 285684e14e39b577b32a222c2c604fd72c962e46..0000000000000000000000000000000000000000
--- a/types/attachment.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Attachment
- */
-export interface Attachment {
-    /**
-     * 
-     * @type {string}
-     * @memberof Attachment
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof Attachment
-     */
-    size: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof Attachment
-     */
-    mimetype: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Attachment
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Attachment
-     */
-    file: string;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Attachment
-     */
-    urls: { [key: string]: any; };
-}
-
-
diff --git a/types/channel-create.ts b/types/channel-create.ts
deleted file mode 100644
index a7e529ed2a9a120696a649ccb554b4629d52a04e..0000000000000000000000000000000000000000
--- a/types/channel-create.ts
+++ /dev/null
@@ -1,68 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Content } from './content';
-import { ContentCategoryEnum } from './content-category-enum';
-
-/**
- * 
- * @export
- * @interface ChannelCreate
- */
-export interface ChannelCreate {
-    /**
-     * 
-     * @type {string}
-     * @memberof ChannelCreate
-     */
-    cover?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ChannelCreate
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ChannelCreate
-     */
-    username: string;
-    /**
-     * 
-     * @type {Content}
-     * @memberof ChannelCreate
-     */
-    description: Content | null;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof ChannelCreate
-     */
-    tags: Array<string>;
-    /**
-     * 
-     * @type {ContentCategoryEnum}
-     * @memberof ChannelCreate
-     */
-    content_category: ContentCategoryEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ChannelCreate
-     */
-    metadata?: { [key: string]: any; };
-}
-
-
diff --git a/types/channel-update.ts b/types/channel-update.ts
deleted file mode 100644
index 9269617f4174e7af7a217d02bb1e9f11ce0d7486..0000000000000000000000000000000000000000
--- a/types/channel-update.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Content } from './content';
-import { ContentCategoryEnum } from './content-category-enum';
-
-/**
- * 
- * @export
- * @interface ChannelUpdate
- */
-export interface ChannelUpdate {
-    /**
-     * 
-     * @type {string}
-     * @memberof ChannelUpdate
-     */
-    cover?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ChannelUpdate
-     */
-    name: string;
-    /**
-     * 
-     * @type {Content}
-     * @memberof ChannelUpdate
-     */
-    description: Content | null;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof ChannelUpdate
-     */
-    tags: Array<string>;
-    /**
-     * 
-     * @type {ContentCategoryEnum}
-     * @memberof ChannelUpdate
-     */
-    content_category: ContentCategoryEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ChannelUpdate
-     */
-    metadata?: { [key: string]: any; };
-}
-
-
diff --git a/types/channel.ts b/types/channel.ts
deleted file mode 100644
index bd1f7be140616a25f984641aaec6fa796f3bc9a2..0000000000000000000000000000000000000000
--- a/types/channel.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { SimpleArtist } from './simple-artist';
-
-/**
- * 
- * @export
- * @interface Channel
- */
-export interface Channel {
-    /**
-     * 
-     * @type {string}
-     * @memberof Channel
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {SimpleArtist}
-     * @memberof Channel
-     */
-    artist: SimpleArtist;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Channel
-     */
-    attributed_to: APIActor;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Channel
-     */
-    actor: APIActor;
-    /**
-     * 
-     * @type {string}
-     * @memberof Channel
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Channel
-     */
-    metadata?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof Channel
-     */
-    rss_url: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Channel
-     */
-    url: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof Channel
-     */
-    downloads_count: number;
-}
-
-
diff --git a/types/content-category-enum.ts b/types/content-category-enum.ts
deleted file mode 100644
index 28f7d179717cf5bed467212ae5522d483315f338..0000000000000000000000000000000000000000
--- a/types/content-category-enum.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ContentCategoryEnum {
-    Music = 'music',
-    Podcast = 'podcast',
-    Other = 'other'
-}
-
-
-
diff --git a/types/content-type-enum.ts b/types/content-type-enum.ts
deleted file mode 100644
index 17f2ce83472ca627eb7acc0879ca05ef465e5cc3..0000000000000000000000000000000000000000
--- a/types/content-type-enum.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ContentTypeEnum {
-    Html = 'text/html',
-    Markdown = 'text/markdown',
-    Plain = 'text/plain'
-}
-
-
-
diff --git a/types/content.ts b/types/content.ts
deleted file mode 100644
index ce307e5b72b45b21c04137c3ba0fc725cec670cd..0000000000000000000000000000000000000000
--- a/types/content.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ContentTypeEnum } from './content-type-enum';
-
-/**
- * 
- * @export
- * @interface Content
- */
-export interface Content {
-    /**
-     * 
-     * @type {string}
-     * @memberof Content
-     */
-    text: string | null;
-    /**
-     * 
-     * @type {ContentTypeEnum}
-     * @memberof Content
-     */
-    content_type: ContentTypeEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof Content
-     */
-    html: string;
-}
-
-
diff --git a/types/cover-field.ts b/types/cover-field.ts
deleted file mode 100644
index c0db143dd9286f62fa192a8ee911c381712f9fff..0000000000000000000000000000000000000000
--- a/types/cover-field.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface CoverField
- */
-export interface CoverField {
-    /**
-     * 
-     * @type {string}
-     * @memberof CoverField
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof CoverField
-     */
-    size: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof CoverField
-     */
-    mimetype: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof CoverField
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof CoverField
-     */
-    file: string;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof CoverField
-     */
-    urls: { [key: string]: any; };
-}
-
-
diff --git a/types/create-application.ts b/types/create-application.ts
deleted file mode 100644
index 40aa6125a6b876a2eafb0c9d6a1914db9847bea3..0000000000000000000000000000000000000000
--- a/types/create-application.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface CreateApplication
- */
-export interface CreateApplication {
-    /**
-     * 
-     * @type {string}
-     * @memberof CreateApplication
-     */
-    client_id: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof CreateApplication
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof CreateApplication
-     */
-    scopes?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof CreateApplication
-     */
-    client_secret: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof CreateApplication
-     */
-    created: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof CreateApplication
-     */
-    updated: string;
-    /**
-     * Allowed URIs list, space separated
-     * @type {string}
-     * @memberof CreateApplication
-     */
-    redirect_uris?: string;
-}
-
-
diff --git a/types/domain.ts b/types/domain.ts
deleted file mode 100644
index d6f3003dc791483eb89300bc687d89a7916ab61f..0000000000000000000000000000000000000000
--- a/types/domain.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Domain
- */
-export interface Domain {
-    /**
-     * 
-     * @type {string}
-     * @memberof Domain
-     */
-    name: string;
-}
-
-
diff --git a/types/endpoints.ts b/types/endpoints.ts
deleted file mode 100644
index 95e184c73a7dee60a81639665dc674d1b5732332..0000000000000000000000000000000000000000
--- a/types/endpoints.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Endpoints
- */
-export interface Endpoints {
-    /**
-     * 
-     * @type {string}
-     * @memberof Endpoints
-     */
-    knownNodes?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Endpoints
-     */
-    channels?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Endpoints
-     */
-    libraries?: string;
-}
-
-
diff --git a/types/federation-choice-enum.ts b/types/federation-choice-enum.ts
deleted file mode 100644
index cb43425dcd6a49eb70c3505f404ca32662f14733..0000000000000000000000000000000000000000
--- a/types/federation-choice-enum.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum FederationChoiceEnum {
-    Person = 'Person',
-    Tombstone = 'Tombstone',
-    Application = 'Application',
-    Group = 'Group',
-    Organization = 'Organization',
-    Service = 'Service'
-}
-
-
-
diff --git a/types/fetch-status-enum.ts b/types/fetch-status-enum.ts
deleted file mode 100644
index c2eaa1551051d3c156838115ab51972ae55dae7f..0000000000000000000000000000000000000000
--- a/types/fetch-status-enum.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum FetchStatusEnum {
-    Pending = 'pending',
-    Errored = 'errored',
-    Finished = 'finished',
-    Skipped = 'skipped'
-}
-
-
-
diff --git a/types/fetch.ts b/types/fetch.ts
deleted file mode 100644
index 802e0c0b832630028829c4e80e58edc43ca26b15..0000000000000000000000000000000000000000
--- a/types/fetch.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { FetchStatusEnum } from './fetch-status-enum';
-
-/**
- * 
- * @export
- * @interface Fetch
- */
-export interface Fetch {
-    /**
-     * 
-     * @type {number}
-     * @memberof Fetch
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof Fetch
-     */
-    url: string;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Fetch
-     */
-    actor: APIActor;
-    /**
-     * 
-     * @type {FetchStatusEnum}
-     * @memberof Fetch
-     */
-    status: FetchStatusEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Fetch
-     */
-    detail: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof Fetch
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Fetch
-     */
-    fetch_date: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof Fetch
-     */
-    object: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Fetch
-     */
-    force?: boolean;
-}
-
-
diff --git a/types/full-actor.ts b/types/full-actor.ts
deleted file mode 100644
index 0e43800ff32a4115e56000298d88ddfd4fba97cd..0000000000000000000000000000000000000000
--- a/types/full-actor.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Attachment } from './attachment';
-import { Content } from './content';
-import { UserBasic } from './user-basic';
-
-/**
- * 
- * @export
- * @interface FullActor
- */
-export interface FullActor {
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    url: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    domain: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    last_fetch_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    preferred_username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    full_username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof FullActor
-     */
-    type: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof FullActor
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof FullActor
-     */
-    is_channel: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof FullActor
-     */
-    manually_approves_followers: boolean;
-    /**
-     * 
-     * @type {UserBasic}
-     * @memberof FullActor
-     */
-    user: UserBasic;
-    /**
-     * 
-     * @type {Content}
-     * @memberof FullActor
-     */
-    summary: Content;
-    /**
-     * 
-     * @type {Attachment}
-     * @memberof FullActor
-     */
-    icon: Attachment;
-}
-
-
diff --git a/types/global-preference.ts b/types/global-preference.ts
deleted file mode 100644
index e2b421ccfa1d470bd2f0b41e83dcc7e9192c721d..0000000000000000000000000000000000000000
--- a/types/global-preference.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface GlobalPreference
- */
-export interface GlobalPreference {
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    section: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    identifier: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    _default: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    value: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    verbose_name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    help_text: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    additional_data: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof GlobalPreference
-     */
-    field: string;
-}
-
-
diff --git a/types/ident.ts b/types/ident.ts
deleted file mode 100644
index ec9db7b6228c54fcc77136684473211c65f812e4..0000000000000000000000000000000000000000
--- a/types/ident.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Ident
- */
-export interface Ident {
-    /**
-     * 
-     * @type {string}
-     * @memberof Ident
-     */
-    type: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof Ident
-     */
-    id: number;
-}
-
-
diff --git a/types/inbox-item-type-enum.ts b/types/inbox-item-type-enum.ts
deleted file mode 100644
index 6dd8098df142796a91c04b141d940fabd6406279..0000000000000000000000000000000000000000
--- a/types/inbox-item-type-enum.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum InboxItemTypeEnum {
-    To = 'to',
-    Cc = 'cc'
-}
-
-
-
diff --git a/types/inbox-item.ts b/types/inbox-item.ts
deleted file mode 100644
index 654cec8c2563209605e1987afe2bb1c03e235d51..0000000000000000000000000000000000000000
--- a/types/inbox-item.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Activity } from './activity';
-import { InboxItemTypeEnum } from './inbox-item-type-enum';
-
-/**
- * 
- * @export
- * @interface InboxItem
- */
-export interface InboxItem {
-    /**
-     * 
-     * @type {number}
-     * @memberof InboxItem
-     */
-    id: number;
-    /**
-     * 
-     * @type {InboxItemTypeEnum}
-     * @memberof InboxItem
-     */
-    type: InboxItemTypeEnum;
-    /**
-     * 
-     * @type {Activity}
-     * @memberof InboxItem
-     */
-    activity: Activity;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof InboxItem
-     */
-    is_read?: boolean;
-}
-
-
diff --git a/types/index.ts b/types/index.ts
deleted file mode 100644
index b33541f0e59a5cce664b425980fdbcbade57e2bb..0000000000000000000000000000000000000000
--- a/types/index.ts
+++ /dev/null
@@ -1,155 +0,0 @@
-export * from './apiactor';
-export * from './apimutation';
-export * from './activity';
-export * from './album';
-export * from './album-create';
-export * from './allow-list-stat';
-export * from './application';
-export * from './artist-album';
-export * from './artist-with-albums';
-export * from './attachment';
-export * from './channel';
-export * from './channel-create';
-export * from './channel-update';
-export * from './content';
-export * from './content-category-enum';
-export * from './content-type-enum';
-export * from './cover-field';
-export * from './create-application';
-export * from './domain';
-export * from './endpoints';
-export * from './federation-choice-enum';
-export * from './fetch';
-export * from './fetch-status-enum';
-export * from './full-actor';
-export * from './global-preference';
-export * from './ident';
-export * from './inbox-item';
-export * from './inbox-item-type-enum';
-export * from './library';
-export * from './library-follow';
-export * from './library-for-owner';
-export * from './library-privacy-level-enum';
-export * from './library-scan';
-export * from './license';
-export * from './listening';
-export * from './listening-write';
-export * from './manage-actor';
-export * from './manage-album';
-export * from './manage-artist';
-export * from './manage-base-actor';
-export * from './manage-base-note';
-export * from './manage-channel';
-export * from './manage-domain';
-export * from './manage-domain-update';
-export * from './manage-instance-policy';
-export * from './manage-invitation';
-export * from './manage-library';
-export * from './manage-nested-artist';
-export * from './manage-nested-library';
-export * from './manage-nested-track';
-export * from './manage-note';
-export * from './manage-report';
-export * from './manage-tag';
-export * from './manage-target';
-export * from './manage-target-type-enum';
-export * from './manage-track';
-export * from './manage-track-album';
-export * from './manage-upload';
-export * from './manage-upload-import-status-enum';
-export * from './manage-user';
-export * from './manage-user-request';
-export * from './manage-user-request-status-enum';
-export * from './manage-user-request-type-enum';
-export * from './manage-user-simple';
-export * from './metadata';
-export * from './metadata-usage';
-export * from './metadata-usage-favorite';
-export * from './moderation-target';
-export * from './moderation-target-type-enum';
-export * from './nested-library-follow';
-export * from './node-info20';
-export * from './paginated-apimutation-list';
-export * from './paginated-album-list';
-export * from './paginated-application-list';
-export * from './paginated-artist-with-albums-list';
-export * from './paginated-channel-list';
-export * from './paginated-domain-list';
-export * from './paginated-inbox-item-list';
-export * from './paginated-library-follow-list';
-export * from './paginated-library-for-owner-list';
-export * from './paginated-license-list';
-export * from './paginated-listening-list';
-export * from './paginated-manage-actor-list';
-export * from './paginated-manage-album-list';
-export * from './paginated-manage-artist-list';
-export * from './paginated-manage-channel-list';
-export * from './paginated-manage-domain-list';
-export * from './paginated-manage-instance-policy-list';
-export * from './paginated-manage-invitation-list';
-export * from './paginated-manage-library-list';
-export * from './paginated-manage-note-list';
-export * from './paginated-manage-report-list';
-export * from './paginated-manage-tag-list';
-export * from './paginated-manage-track-list';
-export * from './paginated-manage-upload-list';
-export * from './paginated-manage-user-list';
-export * from './paginated-manage-user-request-list';
-export * from './paginated-playlist-list';
-export * from './paginated-radio-list';
-export * from './paginated-subscription-list';
-export * from './paginated-tag-list';
-export * from './paginated-track-list';
-export * from './paginated-upload-for-owner-list';
-export * from './paginated-user-filter-list';
-export * from './paginated-user-track-favorite-list';
-export * from './password-change';
-export * from './password-reset';
-export * from './password-reset-confirm';
-export * from './patched-application';
-export * from './patched-channel-update';
-export * from './patched-global-preference';
-export * from './patched-inbox-item';
-export * from './patched-library-for-owner';
-export * from './patched-manage-domain-update';
-export * from './patched-manage-instance-policy';
-export * from './patched-manage-invitation';
-export * from './patched-manage-library';
-export * from './patched-manage-report';
-export * from './patched-manage-user';
-export * from './patched-manage-user-request';
-export * from './patched-playlist';
-export * from './patched-radio';
-export * from './patched-upload-for-owner';
-export * from './patched-user-details';
-export * from './patched-user-write';
-export * from './playlist';
-export * from './privacy-level-enum';
-export * from './radio';
-export * from './radio-session';
-export * from './radio-session-track-serializer-create';
-export * from './rate-limit';
-export * from './register';
-export * from './report';
-export * from './report-type';
-export * from './report-type-enum';
-export * from './scopes';
-export * from './services';
-export * from './simple-artist';
-export * from './software';
-export * from './subscription';
-export * from './tag';
-export * from './total-count';
-export * from './track';
-export * from './track-album';
-export * from './upload-for-owner';
-export * from './upload-for-owner-import-status-enum';
-export * from './usage';
-export * from './user-basic';
-export * from './user-details';
-export * from './user-filter';
-export * from './user-track-favorite';
-export * from './user-track-favorite-write';
-export * from './user-write';
-export * from './users-usage';
-export * from './verify-email';
diff --git a/types/library-follow.ts b/types/library-follow.ts
deleted file mode 100644
index 6bb7797b585b3fea794ec491131d57cdfc0c6550..0000000000000000000000000000000000000000
--- a/types/library-follow.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-
-/**
- * 
- * @export
- * @interface LibraryFollow
- */
-export interface LibraryFollow {
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryFollow
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof LibraryFollow
-     */
-    actor: APIActor;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryFollow
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryFollow
-     */
-    target: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof LibraryFollow
-     */
-    approved: boolean | null;
-}
-
-
diff --git a/types/library-for-owner.ts b/types/library-for-owner.ts
deleted file mode 100644
index d27def677b2fe3c61897c10dd89e28471697e7ee..0000000000000000000000000000000000000000
--- a/types/library-for-owner.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { LibraryPrivacyLevelEnum } from './library-privacy-level-enum';
-
-/**
- * 
- * @export
- * @interface LibraryForOwner
- */
-export interface LibraryForOwner {
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryForOwner
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryForOwner
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryForOwner
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryForOwner
-     */
-    description?: string | null;
-    /**
-     * 
-     * @type {LibraryPrivacyLevelEnum}
-     * @memberof LibraryForOwner
-     */
-    privacy_level?: LibraryPrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof LibraryForOwner
-     */
-    uploads_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof LibraryForOwner
-     */
-    size: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryForOwner
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof LibraryForOwner
-     */
-    actor: APIActor;
-}
-
-
diff --git a/types/library-privacy-level-enum.ts b/types/library-privacy-level-enum.ts
deleted file mode 100644
index 071d9f7b34e7853112e48e1f5bd11d6e1f809574..0000000000000000000000000000000000000000
--- a/types/library-privacy-level-enum.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum LibraryPrivacyLevelEnum {
-    Me = 'me',
-    Instance = 'instance',
-    Everyone = 'everyone'
-}
-
-
-
diff --git a/types/library-scan.ts b/types/library-scan.ts
deleted file mode 100644
index e749808d6003e2de31caf330d2bd1320b5fda11b..0000000000000000000000000000000000000000
--- a/types/library-scan.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface LibraryScan
- */
-export interface LibraryScan {
-    /**
-     * 
-     * @type {number}
-     * @memberof LibraryScan
-     */
-    total_files?: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof LibraryScan
-     */
-    processed_files?: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof LibraryScan
-     */
-    errored_files?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryScan
-     */
-    status?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryScan
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof LibraryScan
-     */
-    modification_date?: string | null;
-}
-
-
diff --git a/types/library.ts b/types/library.ts
deleted file mode 100644
index 6deb1ccf5112e97753a2cfd1845e607fcb87d1f3..0000000000000000000000000000000000000000
--- a/types/library.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { LibraryPrivacyLevelEnum } from './library-privacy-level-enum';
-import { LibraryScan } from './library-scan';
-import { NestedLibraryFollow } from './nested-library-follow';
-
-/**
- * 
- * @export
- * @interface Library
- */
-export interface Library {
-    /**
-     * 
-     * @type {string}
-     * @memberof Library
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Library
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Library
-     */
-    actor: APIActor;
-    /**
-     * 
-     * @type {string}
-     * @memberof Library
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Library
-     */
-    description?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof Library
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof Library
-     */
-    uploads_count: number;
-    /**
-     * 
-     * @type {LibraryPrivacyLevelEnum}
-     * @memberof Library
-     */
-    privacy_level?: LibraryPrivacyLevelEnum;
-    /**
-     * 
-     * @type {NestedLibraryFollow}
-     * @memberof Library
-     */
-    follow: NestedLibraryFollow;
-    /**
-     * 
-     * @type {LibraryScan}
-     * @memberof Library
-     */
-    latest_scan: LibraryScan;
-}
-
-
diff --git a/types/license.ts b/types/license.ts
deleted file mode 100644
index f268dafe1fc35437df8014ce6e8dc0cd18342d0d..0000000000000000000000000000000000000000
--- a/types/license.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface License
- */
-export interface License {
-    /**
-     * 
-     * @type {string}
-     * @memberof License
-     */
-    id: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof License
-     */
-    url: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof License
-     */
-    code: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof License
-     */
-    name: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof License
-     */
-    redistribute: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof License
-     */
-    derivative: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof License
-     */
-    commercial: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof License
-     */
-    attribution: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof License
-     */
-    copyleft: boolean;
-}
-
-
diff --git a/types/listening-write.ts b/types/listening-write.ts
deleted file mode 100644
index 6d20df58b901a3347eed9a60d10f868d0d665e2b..0000000000000000000000000000000000000000
--- a/types/listening-write.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface ListeningWrite
- */
-export interface ListeningWrite {
-    /**
-     * 
-     * @type {number}
-     * @memberof ListeningWrite
-     */
-    id: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ListeningWrite
-     */
-    user?: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ListeningWrite
-     */
-    track: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ListeningWrite
-     */
-    creation_date?: string | null;
-}
-
-
diff --git a/types/listening.ts b/types/listening.ts
deleted file mode 100644
index 630f28fe30232acdf690f63d4e7d999dc5b04f20..0000000000000000000000000000000000000000
--- a/types/listening.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { Track } from './track';
-import { UserBasic } from './user-basic';
-
-/**
- * 
- * @export
- * @interface Listening
- */
-export interface Listening {
-    /**
-     * 
-     * @type {number}
-     * @memberof Listening
-     */
-    id: number;
-    /**
-     * 
-     * @type {UserBasic}
-     * @memberof Listening
-     */
-    user: UserBasic;
-    /**
-     * 
-     * @type {Track}
-     * @memberof Listening
-     */
-    track: Track;
-    /**
-     * 
-     * @type {string}
-     * @memberof Listening
-     */
-    creation_date?: string | null;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Listening
-     */
-    actor: APIActor;
-}
-
-
diff --git a/types/manage-actor.ts b/types/manage-actor.ts
deleted file mode 100644
index 32ea6a02ea7e5f15852e840239b3c551a23df981..0000000000000000000000000000000000000000
--- a/types/manage-actor.ts
+++ /dev/null
@@ -1,140 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { FederationChoiceEnum } from './federation-choice-enum';
-import { ManageUser } from './manage-user';
-
-/**
- * 
- * @export
- * @interface ManageActor
- */
-export interface ManageActor {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageActor
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    preferred_username: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    full_username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    domain: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    name?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {FederationChoiceEnum}
-     * @memberof ManageActor
-     */
-    type?: FederationChoiceEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    last_fetch_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    inbox_url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    outbox_url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageActor
-     */
-    shared_inbox_url?: string | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageActor
-     */
-    manually_approves_followers?: boolean | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageActor
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageActor
-     */
-    uploads_count: number;
-    /**
-     * 
-     * @type {ManageUser}
-     * @memberof ManageActor
-     */
-    user: ManageUser;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageActor
-     */
-    instance_policy: number;
-}
-
-
diff --git a/types/manage-album.ts b/types/manage-album.ts
deleted file mode 100644
index d08581030ef9ea30a66122436bfb763898c1a401..0000000000000000000000000000000000000000
--- a/types/manage-album.ts
+++ /dev/null
@@ -1,105 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { CoverField } from './cover-field';
-import { ManageBaseActor } from './manage-base-actor';
-import { ManageNestedArtist } from './manage-nested-artist';
-
-/**
- * 
- * @export
- * @interface ManageAlbum
- */
-export interface ManageAlbum {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageAlbum
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageAlbum
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageAlbum
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageAlbum
-     */
-    title: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageAlbum
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageAlbum
-     */
-    release_date?: string | null;
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof ManageAlbum
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageAlbum
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageAlbum
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageAlbum
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {ManageNestedArtist}
-     * @memberof ManageAlbum
-     */
-    artist: ManageNestedArtist;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageAlbum
-     */
-    attributed_to: ManageBaseActor;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof ManageAlbum
-     */
-    tags: Array<string>;
-}
-
-
diff --git a/types/manage-artist.ts b/types/manage-artist.ts
deleted file mode 100644
index 738cfde8d8f9c5a4926a62f4166f02707e9839e5..0000000000000000000000000000000000000000
--- a/types/manage-artist.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ContentCategoryEnum } from './content-category-enum';
-import { CoverField } from './cover-field';
-import { ManageBaseActor } from './manage-base-actor';
-
-/**
- * 
- * @export
- * @interface ManageArtist
- */
-export interface ManageArtist {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageArtist
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageArtist
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageArtist
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageArtist
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageArtist
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageArtist
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageArtist
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageArtist
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageArtist
-     */
-    albums_count: number;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageArtist
-     */
-    attributed_to: ManageBaseActor;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof ManageArtist
-     */
-    tags: Array<string>;
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof ManageArtist
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageArtist
-     */
-    channel: string;
-    /**
-     * 
-     * @type {ContentCategoryEnum}
-     * @memberof ManageArtist
-     */
-    content_category?: ContentCategoryEnum;
-}
-
-
diff --git a/types/manage-base-actor.ts b/types/manage-base-actor.ts
deleted file mode 100644
index 77bad7e213eba7b351c098de49cf93e4cadc43d3..0000000000000000000000000000000000000000
--- a/types/manage-base-actor.ts
+++ /dev/null
@@ -1,121 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { FederationChoiceEnum } from './federation-choice-enum';
-
-/**
- * 
- * @export
- * @interface ManageBaseActor
- */
-export interface ManageBaseActor {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageBaseActor
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    preferred_username: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    full_username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    domain: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    name?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {FederationChoiceEnum}
-     * @memberof ManageBaseActor
-     */
-    type?: FederationChoiceEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    last_fetch_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    inbox_url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    outbox_url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseActor
-     */
-    shared_inbox_url?: string | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageBaseActor
-     */
-    manually_approves_followers?: boolean | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageBaseActor
-     */
-    is_local: boolean;
-}
-
-
diff --git a/types/manage-base-note.ts b/types/manage-base-note.ts
deleted file mode 100644
index 7025846359023a028588668e6e66d332106af6fd..0000000000000000000000000000000000000000
--- a/types/manage-base-note.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageBaseActor } from './manage-base-actor';
-
-/**
- * 
- * @export
- * @interface ManageBaseNote
- */
-export interface ManageBaseNote {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageBaseNote
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseNote
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseNote
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageBaseNote
-     */
-    summary: string;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageBaseNote
-     */
-    author: ManageBaseActor;
-}
-
-
diff --git a/types/manage-channel.ts b/types/manage-channel.ts
deleted file mode 100644
index 8e4e4361bba639fcf5f0717c090ff7e72df875b3..0000000000000000000000000000000000000000
--- a/types/manage-channel.ts
+++ /dev/null
@@ -1,74 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageArtist } from './manage-artist';
-import { ManageBaseActor } from './manage-base-actor';
-
-/**
- * 
- * @export
- * @interface ManageChannel
- */
-export interface ManageChannel {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageChannel
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageChannel
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageChannel
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {ManageArtist}
-     * @memberof ManageChannel
-     */
-    artist: ManageArtist;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageChannel
-     */
-    attributed_to: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageChannel
-     */
-    actor: ManageBaseActor;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageChannel
-     */
-    rss_url: string | null;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageChannel
-     */
-    metadata: { [key: string]: any; };
-}
-
-
diff --git a/types/manage-domain-update.ts b/types/manage-domain-update.ts
deleted file mode 100644
index d0eff3d3c054c15a343152f2dd8f3bb46c53aad8..0000000000000000000000000000000000000000
--- a/types/manage-domain-update.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface ManageDomainUpdate
- */
-export interface ManageDomainUpdate {
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageDomainUpdate
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageDomainUpdate
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageDomainUpdate
-     */
-    actors_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageDomainUpdate
-     */
-    outbox_activities_count: number;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageDomainUpdate
-     */
-    nodeinfo: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageDomainUpdate
-     */
-    nodeinfo_fetch_date: string | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageDomainUpdate
-     */
-    instance_policy: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageDomainUpdate
-     */
-    allowed?: boolean | null;
-}
-
-
diff --git a/types/manage-domain.ts b/types/manage-domain.ts
deleted file mode 100644
index f5839cce475721efd91d8ae9c614ccc235db512f..0000000000000000000000000000000000000000
--- a/types/manage-domain.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface ManageDomain
- */
-export interface ManageDomain {
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageDomain
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageDomain
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageDomain
-     */
-    actors_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageDomain
-     */
-    outbox_activities_count: number;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageDomain
-     */
-    nodeinfo: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageDomain
-     */
-    nodeinfo_fetch_date: string | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageDomain
-     */
-    instance_policy: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageDomain
-     */
-    allowed?: boolean | null;
-}
-
-
diff --git a/types/manage-instance-policy.ts b/types/manage-instance-policy.ts
deleted file mode 100644
index 58497ffab669f0c1657a1f1a317d27f16ea19415..0000000000000000000000000000000000000000
--- a/types/manage-instance-policy.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageTarget } from './manage-target';
-
-/**
- * 
- * @export
- * @interface ManageInstancePolicy
- */
-export interface ManageInstancePolicy {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageInstancePolicy
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageInstancePolicy
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {ManageTarget}
-     * @memberof ManageInstancePolicy
-     */
-    target: ManageTarget;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageInstancePolicy
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageInstancePolicy
-     */
-    actor: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageInstancePolicy
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageInstancePolicy
-     */
-    is_active?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageInstancePolicy
-     */
-    block_all?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageInstancePolicy
-     */
-    silence_activity?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageInstancePolicy
-     */
-    silence_notifications?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageInstancePolicy
-     */
-    reject_media?: boolean;
-}
-
-
diff --git a/types/manage-invitation.ts b/types/manage-invitation.ts
deleted file mode 100644
index 182ab8019ced482e8c57558c08c563114f912f9e..0000000000000000000000000000000000000000
--- a/types/manage-invitation.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageUserSimple } from './manage-user-simple';
-
-/**
- * 
- * @export
- * @interface ManageInvitation
- */
-export interface ManageInvitation {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageInvitation
-     */
-    id: number;
-    /**
-     * 
-     * @type {ManageUserSimple}
-     * @memberof ManageInvitation
-     */
-    owner?: ManageUserSimple;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageInvitation
-     */
-    code?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageInvitation
-     */
-    expiration_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageInvitation
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {Array<ManageUserSimple>}
-     * @memberof ManageInvitation
-     */
-    users?: Array<ManageUserSimple>;
-}
-
-
diff --git a/types/manage-library.ts b/types/manage-library.ts
deleted file mode 100644
index d76ce17864ed18ffe637290e1421b7b55d6beafb..0000000000000000000000000000000000000000
--- a/types/manage-library.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { LibraryPrivacyLevelEnum } from './library-privacy-level-enum';
-import { ManageBaseActor } from './manage-base-actor';
-
-/**
- * 
- * @export
- * @interface ManageLibrary
- */
-export interface ManageLibrary {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageLibrary
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    url: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    description?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageLibrary
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {LibraryPrivacyLevelEnum}
-     * @memberof ManageLibrary
-     */
-    privacy_level?: LibraryPrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageLibrary
-     */
-    uploads_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageLibrary
-     */
-    followers_count: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageLibrary
-     */
-    followers_url: string;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageLibrary
-     */
-    actor: ManageBaseActor;
-}
-
-
diff --git a/types/manage-nested-artist.ts b/types/manage-nested-artist.ts
deleted file mode 100644
index e90f04603a3eabab1f48bccf164ad5f3873e276a..0000000000000000000000000000000000000000
--- a/types/manage-nested-artist.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface ManageNestedArtist
- */
-export interface ManageNestedArtist {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageNestedArtist
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedArtist
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedArtist
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedArtist
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedArtist
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedArtist
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageNestedArtist
-     */
-    is_local: boolean;
-}
-
-
diff --git a/types/manage-nested-library.ts b/types/manage-nested-library.ts
deleted file mode 100644
index b3c9cf5c05d0722e59a3661fb0da849f6d3ae2c5..0000000000000000000000000000000000000000
--- a/types/manage-nested-library.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { LibraryPrivacyLevelEnum } from './library-privacy-level-enum';
-import { ManageBaseActor } from './manage-base-actor';
-
-/**
- * 
- * @export
- * @interface ManageNestedLibrary
- */
-export interface ManageNestedLibrary {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageNestedLibrary
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    description?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageNestedLibrary
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {LibraryPrivacyLevelEnum}
-     * @memberof ManageNestedLibrary
-     */
-    privacy_level?: LibraryPrivacyLevelEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedLibrary
-     */
-    followers_url: string;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageNestedLibrary
-     */
-    actor: ManageBaseActor;
-}
-
-
diff --git a/types/manage-nested-track.ts b/types/manage-nested-track.ts
deleted file mode 100644
index c3532d666a714ec63bf594aa2b1122e1c2a7dcde..0000000000000000000000000000000000000000
--- a/types/manage-nested-track.ts
+++ /dev/null
@@ -1,90 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface ManageNestedTrack
- */
-export interface ManageNestedTrack {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageNestedTrack
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedTrack
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedTrack
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedTrack
-     */
-    title: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedTrack
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageNestedTrack
-     */
-    position?: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageNestedTrack
-     */
-    disc_number?: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedTrack
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageNestedTrack
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedTrack
-     */
-    copyright?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNestedTrack
-     */
-    license?: string | null;
-}
-
-
diff --git a/types/manage-note.ts b/types/manage-note.ts
deleted file mode 100644
index 49010c5978513ecd8a9ac1e37e38bd6f17fb899e..0000000000000000000000000000000000000000
--- a/types/manage-note.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageBaseActor } from './manage-base-actor';
-
-/**
- * 
- * @export
- * @interface ManageNote
- */
-export interface ManageNote {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageNote
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNote
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNote
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageNote
-     */
-    summary: string;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageNote
-     */
-    author: ManageBaseActor;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageNote
-     */
-    target: { [key: string]: any; };
-}
-
-
diff --git a/types/manage-report.ts b/types/manage-report.ts
deleted file mode 100644
index 1d18854ac89783c43bb5abe9617be9ac846e64b0..0000000000000000000000000000000000000000
--- a/types/manage-report.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageBaseActor } from './manage-base-actor';
-import { ManageBaseNote } from './manage-base-note';
-import { ReportTypeEnum } from './report-type-enum';
-
-/**
- * 
- * @export
- * @interface ManageReport
- */
-export interface ManageReport {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageReport
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageReport
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageReport
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageReport
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageReport
-     */
-    handled_date: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageReport
-     */
-    summary: string | null;
-    /**
-     * 
-     * @type {ReportTypeEnum}
-     * @memberof ManageReport
-     */
-    type: ReportTypeEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageReport
-     */
-    target: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageReport
-     */
-    target_state: { [key: string]: any; } | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageReport
-     */
-    is_handled?: boolean;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageReport
-     */
-    assigned_to: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageReport
-     */
-    target_owner: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageReport
-     */
-    submitter: ManageBaseActor;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageReport
-     */
-    submitter_email: string | null;
-    /**
-     * 
-     * @type {ManageBaseNote}
-     * @memberof ManageReport
-     */
-    notes: ManageBaseNote;
-}
-
-
diff --git a/types/manage-tag.ts b/types/manage-tag.ts
deleted file mode 100644
index ad5f2641cc71abd7dbcb63fbe10f4b6214d60ae1..0000000000000000000000000000000000000000
--- a/types/manage-tag.ts
+++ /dev/null
@@ -1,60 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface ManageTag
- */
-export interface ManageTag {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTag
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTag
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTag
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTag
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTag
-     */
-    albums_count: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTag
-     */
-    artists_count: number;
-}
-
-
diff --git a/types/manage-target-type-enum.ts b/types/manage-target-type-enum.ts
deleted file mode 100644
index 6fc2325981e1009f83fc33f57894dcdfc32462cb..0000000000000000000000000000000000000000
--- a/types/manage-target-type-enum.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ManageTargetTypeEnum {
-    Domain = 'domain',
-    Actor = 'actor'
-}
-
-
-
diff --git a/types/manage-target.ts b/types/manage-target.ts
deleted file mode 100644
index 5da1ba6ae1748ec145cd3f0ab82e1081d59e7e06..0000000000000000000000000000000000000000
--- a/types/manage-target.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageTargetTypeEnum } from './manage-target-type-enum';
-
-/**
- * 
- * @export
- * @interface ManageTarget
- */
-export interface ManageTarget {
-    /**
-     * 
-     * @type {ManageTargetTypeEnum}
-     * @memberof ManageTarget
-     */
-    type: ManageTargetTypeEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTarget
-     */
-    id: string;
-}
-
-
diff --git a/types/manage-track-album.ts b/types/manage-track-album.ts
deleted file mode 100644
index 3368e5781d21401287f4d76aab8d879bfcca712b..0000000000000000000000000000000000000000
--- a/types/manage-track-album.ts
+++ /dev/null
@@ -1,92 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { CoverField } from './cover-field';
-import { ManageNestedArtist } from './manage-nested-artist';
-
-/**
- * 
- * @export
- * @interface ManageTrackAlbum
- */
-export interface ManageTrackAlbum {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTrackAlbum
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrackAlbum
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrackAlbum
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrackAlbum
-     */
-    title: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrackAlbum
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrackAlbum
-     */
-    release_date?: string | null;
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof ManageTrackAlbum
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrackAlbum
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageTrackAlbum
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTrackAlbum
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {ManageNestedArtist}
-     * @memberof ManageTrackAlbum
-     */
-    artist: ManageNestedArtist;
-}
-
-
diff --git a/types/manage-track.ts b/types/manage-track.ts
deleted file mode 100644
index 0863853291ebeb7f5c7265316bbfc3260102561e..0000000000000000000000000000000000000000
--- a/types/manage-track.ts
+++ /dev/null
@@ -1,130 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { CoverField } from './cover-field';
-import { ManageBaseActor } from './manage-base-actor';
-import { ManageNestedArtist } from './manage-nested-artist';
-import { ManageTrackAlbum } from './manage-track-album';
-
-/**
- * 
- * @export
- * @interface ManageTrack
- */
-export interface ManageTrack {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTrack
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrack
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrack
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrack
-     */
-    title: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrack
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTrack
-     */
-    position?: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTrack
-     */
-    disc_number?: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrack
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageTrack
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrack
-     */
-    copyright?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageTrack
-     */
-    license?: string | null;
-    /**
-     * 
-     * @type {ManageNestedArtist}
-     * @memberof ManageTrack
-     */
-    artist: ManageNestedArtist;
-    /**
-     * 
-     * @type {ManageTrackAlbum}
-     * @memberof ManageTrack
-     */
-    album: ManageTrackAlbum;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageTrack
-     */
-    attributed_to: ManageBaseActor;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageTrack
-     */
-    uploads_count: number;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof ManageTrack
-     */
-    tags: Array<string>;
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof ManageTrack
-     */
-    cover: CoverField;
-}
-
-
diff --git a/types/manage-upload-import-status-enum.ts b/types/manage-upload-import-status-enum.ts
deleted file mode 100644
index b2b5e7bf257b645fe99874f015b1e66a2b69c94c..0000000000000000000000000000000000000000
--- a/types/manage-upload-import-status-enum.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ManageUploadImportStatusEnum {
-    Draft = 'draft',
-    Pending = 'pending',
-    Finished = 'finished',
-    Errored = 'errored',
-    Skipped = 'skipped'
-}
-
-
-
diff --git a/types/manage-upload.ts b/types/manage-upload.ts
deleted file mode 100644
index b4b1b5025ab88326a1a7cc4fe5be0d59c37a5879..0000000000000000000000000000000000000000
--- a/types/manage-upload.ts
+++ /dev/null
@@ -1,171 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageNestedLibrary } from './manage-nested-library';
-import { ManageNestedTrack } from './manage-nested-track';
-import { ManageUploadImportStatusEnum } from './manage-upload-import-status-enum';
-
-/**
- * 
- * @export
- * @interface ManageUpload
- */
-export interface ManageUpload {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUpload
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    domain: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ManageUpload
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    audio_file: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    listen_url: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    source?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    filename: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    mimetype?: string | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUpload
-     */
-    duration?: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUpload
-     */
-    bitrate?: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUpload
-     */
-    size?: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    accessed_date?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    modification_date?: string | null;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageUpload
-     */
-    metadata?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    import_date?: string | null;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageUpload
-     */
-    import_details?: { [key: string]: any; };
-    /**
-     * 
-     * @type {ManageUploadImportStatusEnum}
-     * @memberof ManageUpload
-     */
-    import_status?: ManageUploadImportStatusEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageUpload
-     */
-    import_metadata?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUpload
-     */
-    import_reference?: string;
-    /**
-     * 
-     * @type {ManageNestedTrack}
-     * @memberof ManageUpload
-     */
-    track: ManageNestedTrack;
-    /**
-     * 
-     * @type {ManageNestedLibrary}
-     * @memberof ManageUpload
-     */
-    library: ManageNestedLibrary;
-}
-
-
diff --git a/types/manage-user-request-status-enum.ts b/types/manage-user-request-status-enum.ts
deleted file mode 100644
index 9d821321632741b99113b2dd15bc1425382f82bd..0000000000000000000000000000000000000000
--- a/types/manage-user-request-status-enum.ts
+++ /dev/null
@@ -1,28 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ManageUserRequestStatusEnum {
-    Pending = 'pending',
-    Refused = 'refused',
-    Approved = 'approved'
-}
-
-
-
diff --git a/types/manage-user-request-type-enum.ts b/types/manage-user-request-type-enum.ts
deleted file mode 100644
index 7c4be21bc37a90c21383274a0ddb69b98b5ad5f3..0000000000000000000000000000000000000000
--- a/types/manage-user-request-type-enum.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ManageUserRequestTypeEnum {
-    Signup = 'signup'
-}
-
-
-
diff --git a/types/manage-user-request.ts b/types/manage-user-request.ts
deleted file mode 100644
index fcbc1b23538a71b276447581e7a13b32b036fa79..0000000000000000000000000000000000000000
--- a/types/manage-user-request.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageBaseActor } from './manage-base-actor';
-import { ManageBaseNote } from './manage-base-note';
-import { ManageUserRequestStatusEnum } from './manage-user-request-status-enum';
-import { ManageUserRequestTypeEnum } from './manage-user-request-type-enum';
-
-/**
- * 
- * @export
- * @interface ManageUserRequest
- */
-export interface ManageUserRequest {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUserRequest
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUserRequest
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUserRequest
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUserRequest
-     */
-    handled_date: string | null;
-    /**
-     * 
-     * @type {ManageUserRequestTypeEnum}
-     * @memberof ManageUserRequest
-     */
-    type: ManageUserRequestTypeEnum;
-    /**
-     * 
-     * @type {ManageUserRequestStatusEnum}
-     * @memberof ManageUserRequest
-     */
-    status?: ManageUserRequestStatusEnum;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageUserRequest
-     */
-    assigned_to: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof ManageUserRequest
-     */
-    submitter: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseNote}
-     * @memberof ManageUserRequest
-     */
-    notes: ManageBaseNote;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageUserRequest
-     */
-    metadata: { [key: string]: any; } | null;
-}
-
-
diff --git a/types/manage-user-simple.ts b/types/manage-user-simple.ts
deleted file mode 100644
index c19504442d811f1af4249bb53bac0440d9e8ca0a..0000000000000000000000000000000000000000
--- a/types/manage-user-simple.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { PrivacyLevelEnum } from './privacy-level-enum';
-
-/**
- * 
- * @export
- * @interface ManageUserSimple
- */
-export interface ManageUserSimple {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUserSimple
-     */
-    id: number;
-    /**
-     * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
-     * @type {string}
-     * @memberof ManageUserSimple
-     */
-    username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUserSimple
-     */
-    email?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUserSimple
-     */
-    name?: string;
-    /**
-     * Designates whether this user should be treated as active. Unselect this instead of deleting accounts.
-     * @type {boolean}
-     * @memberof ManageUserSimple
-     */
-    is_active?: boolean;
-    /**
-     * Designates whether the user can log into this admin site.
-     * @type {boolean}
-     * @memberof ManageUserSimple
-     */
-    is_staff?: boolean;
-    /**
-     * Designates that this user has all permissions without explicitly assigning them.
-     * @type {boolean}
-     * @memberof ManageUserSimple
-     */
-    is_superuser?: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUserSimple
-     */
-    date_joined?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUserSimple
-     */
-    last_activity?: string | null;
-    /**
-     * 
-     * @type {PrivacyLevelEnum}
-     * @memberof ManageUserSimple
-     */
-    privacy_level?: PrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUserSimple
-     */
-    upload_quota?: number | null;
-}
-
-
diff --git a/types/manage-user.ts b/types/manage-user.ts
deleted file mode 100644
index 8ff9c379deadcc666a98b70b8f2ff75b7342fc94..0000000000000000000000000000000000000000
--- a/types/manage-user.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { PrivacyLevelEnum } from './privacy-level-enum';
-
-/**
- * 
- * @export
- * @interface ManageUser
- */
-export interface ManageUser {
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUser
-     */
-    id: number;
-    /**
-     * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
-     * @type {string}
-     * @memberof ManageUser
-     */
-    username: string;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof ManageUser
-     */
-    actor: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUser
-     */
-    email: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUser
-     */
-    name?: string;
-    /**
-     * Designates whether this user should be treated as active. Unselect this instead of deleting accounts.
-     * @type {boolean}
-     * @memberof ManageUser
-     */
-    is_active?: boolean;
-    /**
-     * Designates whether the user can log into this admin site.
-     * @type {boolean}
-     * @memberof ManageUser
-     */
-    is_staff?: boolean;
-    /**
-     * Designates that this user has all permissions without explicitly assigning them.
-     * @type {boolean}
-     * @memberof ManageUser
-     */
-    is_superuser?: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUser
-     */
-    date_joined: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUser
-     */
-    last_activity: string | null;
-    /**
-     * 
-     * @type {PrivacyLevelEnum}
-     * @memberof ManageUser
-     */
-    privacy_level: PrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof ManageUser
-     */
-    upload_quota: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof ManageUser
-     */
-    full_username: string;
-}
-
-
diff --git a/types/metadata-usage-favorite.ts b/types/metadata-usage-favorite.ts
deleted file mode 100644
index 20753868e44e7d25c94b717db89be8c5827c9602..0000000000000000000000000000000000000000
--- a/types/metadata-usage-favorite.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { TotalCount } from './total-count';
-
-/**
- * 
- * @export
- * @interface MetadataUsageFavorite
- */
-export interface MetadataUsageFavorite {
-    /**
-     * 
-     * @type {TotalCount}
-     * @memberof MetadataUsageFavorite
-     */
-    tracks: TotalCount;
-}
-
-
diff --git a/types/metadata-usage.ts b/types/metadata-usage.ts
deleted file mode 100644
index 4740f2e81a466f3d243e9459ae7f3c267db66d62..0000000000000000000000000000000000000000
--- a/types/metadata-usage.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { MetadataUsageFavorite } from './metadata-usage-favorite';
-import { TotalCount } from './total-count';
-
-/**
- * 
- * @export
- * @interface MetadataUsage
- */
-export interface MetadataUsage {
-    /**
-     * 
-     * @type {MetadataUsageFavorite}
-     * @memberof MetadataUsage
-     */
-    favorites: MetadataUsageFavorite;
-    /**
-     * 
-     * @type {TotalCount}
-     * @memberof MetadataUsage
-     */
-    listenings: TotalCount;
-    /**
-     * 
-     * @type {TotalCount}
-     * @memberof MetadataUsage
-     */
-    downloads: TotalCount;
-}
-
-
diff --git a/types/metadata.ts b/types/metadata.ts
deleted file mode 100644
index 4ce03e984ed653f2db5d34f9848bf5a78f70ec77..0000000000000000000000000000000000000000
--- a/types/metadata.ts
+++ /dev/null
@@ -1,136 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { AllowListStat } from './allow-list-stat';
-import { Endpoints } from './endpoints';
-import { MetadataUsage } from './metadata-usage';
-import { ReportType } from './report-type';
-
-/**
- * 
- * @export
- * @interface Metadata
- */
-export interface Metadata {
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    actorId: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Metadata
-     */
-    _private: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    shortDescription: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    longDescription: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    rules: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    contactEmail: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    terms: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    nodeName: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    banner: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof Metadata
-     */
-    defaultUploadQuota: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Metadata
-     */
-    library: boolean;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof Metadata
-     */
-    supportedUploadExtensions: Array<string>;
-    /**
-     * 
-     * @type {AllowListStat}
-     * @memberof Metadata
-     */
-    allowList: AllowListStat;
-    /**
-     * 
-     * @type {Array<ReportType>}
-     * @memberof Metadata
-     */
-    reportTypes: Array<ReportType>;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Metadata
-     */
-    funkwhaleSupportMessageEnabled: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof Metadata
-     */
-    instanceSupportMessage: string;
-    /**
-     * 
-     * @type {Endpoints}
-     * @memberof Metadata
-     */
-    endpoints: Endpoints;
-    /**
-     * 
-     * @type {MetadataUsage}
-     * @memberof Metadata
-     */
-    usage: MetadataUsage;
-}
-
-
diff --git a/types/moderation-target-type-enum.ts b/types/moderation-target-type-enum.ts
deleted file mode 100644
index bc69786f84b4911010e2560eb31d358f27adacff..0000000000000000000000000000000000000000
--- a/types/moderation-target-type-enum.ts
+++ /dev/null
@@ -1,26 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ModerationTargetTypeEnum {
-    Artist = 'artist'
-}
-
-
-
diff --git a/types/moderation-target.ts b/types/moderation-target.ts
deleted file mode 100644
index b7fc8b293a9dd57994c1d77ddf222c1c9eb29bb9..0000000000000000000000000000000000000000
--- a/types/moderation-target.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ModerationTargetTypeEnum } from './moderation-target-type-enum';
-
-/**
- * 
- * @export
- * @interface ModerationTarget
- */
-export interface ModerationTarget {
-    /**
-     * 
-     * @type {ModerationTargetTypeEnum}
-     * @memberof ModerationTarget
-     */
-    type: ModerationTargetTypeEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof ModerationTarget
-     */
-    id: string;
-}
-
-
diff --git a/types/nested-library-follow.ts b/types/nested-library-follow.ts
deleted file mode 100644
index 5572bdacaed6a29ae5a4e2f3b0e06f24d5e8e31b..0000000000000000000000000000000000000000
--- a/types/nested-library-follow.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface NestedLibraryFollow
- */
-export interface NestedLibraryFollow {
-    /**
-     * 
-     * @type {string}
-     * @memberof NestedLibraryFollow
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof NestedLibraryFollow
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof NestedLibraryFollow
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof NestedLibraryFollow
-     */
-    approved?: boolean | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof NestedLibraryFollow
-     */
-    modification_date: string;
-}
-
-
diff --git a/types/node-info20.ts b/types/node-info20.ts
deleted file mode 100644
index a39cb933a750da098555f2f9049e533fe74b0e78..0000000000000000000000000000000000000000
--- a/types/node-info20.ts
+++ /dev/null
@@ -1,70 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Metadata } from './metadata';
-import { Services } from './services';
-import { Software } from './software';
-import { Usage } from './usage';
-
-/**
- * 
- * @export
- * @interface NodeInfo20
- */
-export interface NodeInfo20 {
-    /**
-     * 
-     * @type {string}
-     * @memberof NodeInfo20
-     */
-    version: string;
-    /**
-     * 
-     * @type {Software}
-     * @memberof NodeInfo20
-     */
-    software: Software;
-    /**
-     * 
-     * @type {Array<any>}
-     * @memberof NodeInfo20
-     */
-    protocols: Array<any>;
-    /**
-     * 
-     * @type {Services}
-     * @memberof NodeInfo20
-     */
-    services?: Services;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof NodeInfo20
-     */
-    openRegistrations: boolean;
-    /**
-     * 
-     * @type {Usage}
-     * @memberof NodeInfo20
-     */
-    usage: Usage;
-    /**
-     * 
-     * @type {Metadata}
-     * @memberof NodeInfo20
-     */
-    metadata: Metadata;
-}
-
-
diff --git a/types/paginated-album-list.ts b/types/paginated-album-list.ts
deleted file mode 100644
index 314e0c6f7264b8194513ebac76cd22f03cdf1ce0..0000000000000000000000000000000000000000
--- a/types/paginated-album-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Album } from './album';
-
-/**
- * 
- * @export
- * @interface PaginatedAlbumList
- */
-export interface PaginatedAlbumList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedAlbumList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedAlbumList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedAlbumList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Album>}
-     * @memberof PaginatedAlbumList
-     */
-    results?: Array<Album>;
-}
-
-
diff --git a/types/paginated-apimutation-list.ts b/types/paginated-apimutation-list.ts
deleted file mode 100644
index 31226027c6988d90f5d41564e719a66b1260fa41..0000000000000000000000000000000000000000
--- a/types/paginated-apimutation-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIMutation } from './apimutation';
-
-/**
- * 
- * @export
- * @interface PaginatedAPIMutationList
- */
-export interface PaginatedAPIMutationList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedAPIMutationList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedAPIMutationList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedAPIMutationList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<APIMutation>}
-     * @memberof PaginatedAPIMutationList
-     */
-    results?: Array<APIMutation>;
-}
-
-
diff --git a/types/paginated-application-list.ts b/types/paginated-application-list.ts
deleted file mode 100644
index d1374da5db3e95ad50e9e0fe9ee2638ac8142ed2..0000000000000000000000000000000000000000
--- a/types/paginated-application-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Application } from './application';
-
-/**
- * 
- * @export
- * @interface PaginatedApplicationList
- */
-export interface PaginatedApplicationList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedApplicationList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedApplicationList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedApplicationList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Application>}
-     * @memberof PaginatedApplicationList
-     */
-    results?: Array<Application>;
-}
-
-
diff --git a/types/paginated-artist-with-albums-list.ts b/types/paginated-artist-with-albums-list.ts
deleted file mode 100644
index a5014e5f647584f64a1e9cbae98950a11ab4c455..0000000000000000000000000000000000000000
--- a/types/paginated-artist-with-albums-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ArtistWithAlbums } from './artist-with-albums';
-
-/**
- * 
- * @export
- * @interface PaginatedArtistWithAlbumsList
- */
-export interface PaginatedArtistWithAlbumsList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedArtistWithAlbumsList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedArtistWithAlbumsList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedArtistWithAlbumsList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ArtistWithAlbums>}
-     * @memberof PaginatedArtistWithAlbumsList
-     */
-    results?: Array<ArtistWithAlbums>;
-}
-
-
diff --git a/types/paginated-channel-list.ts b/types/paginated-channel-list.ts
deleted file mode 100644
index 70d46dfe85db8f488fad5e2dd43a61768196063c..0000000000000000000000000000000000000000
--- a/types/paginated-channel-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Channel } from './channel';
-
-/**
- * 
- * @export
- * @interface PaginatedChannelList
- */
-export interface PaginatedChannelList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedChannelList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedChannelList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedChannelList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Channel>}
-     * @memberof PaginatedChannelList
-     */
-    results?: Array<Channel>;
-}
-
-
diff --git a/types/paginated-domain-list.ts b/types/paginated-domain-list.ts
deleted file mode 100644
index c2d1682031d8302dc6bdfd3ba6d1ce17349f2970..0000000000000000000000000000000000000000
--- a/types/paginated-domain-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Domain } from './domain';
-
-/**
- * 
- * @export
- * @interface PaginatedDomainList
- */
-export interface PaginatedDomainList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedDomainList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedDomainList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedDomainList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Domain>}
-     * @memberof PaginatedDomainList
-     */
-    results?: Array<Domain>;
-}
-
-
diff --git a/types/paginated-inbox-item-list.ts b/types/paginated-inbox-item-list.ts
deleted file mode 100644
index 4bdcad23ea38becd900533ac505732d2023f8fcc..0000000000000000000000000000000000000000
--- a/types/paginated-inbox-item-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { InboxItem } from './inbox-item';
-
-/**
- * 
- * @export
- * @interface PaginatedInboxItemList
- */
-export interface PaginatedInboxItemList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedInboxItemList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedInboxItemList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedInboxItemList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<InboxItem>}
-     * @memberof PaginatedInboxItemList
-     */
-    results?: Array<InboxItem>;
-}
-
-
diff --git a/types/paginated-library-follow-list.ts b/types/paginated-library-follow-list.ts
deleted file mode 100644
index ebe5888023c91a651d0bed2e1a32ebadbbc619ec..0000000000000000000000000000000000000000
--- a/types/paginated-library-follow-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { LibraryFollow } from './library-follow';
-
-/**
- * 
- * @export
- * @interface PaginatedLibraryFollowList
- */
-export interface PaginatedLibraryFollowList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedLibraryFollowList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedLibraryFollowList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedLibraryFollowList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<LibraryFollow>}
-     * @memberof PaginatedLibraryFollowList
-     */
-    results?: Array<LibraryFollow>;
-}
-
-
diff --git a/types/paginated-library-for-owner-list.ts b/types/paginated-library-for-owner-list.ts
deleted file mode 100644
index ba60e60109bc14a3abddbf6bf45f8cf19f15e08a..0000000000000000000000000000000000000000
--- a/types/paginated-library-for-owner-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { LibraryForOwner } from './library-for-owner';
-
-/**
- * 
- * @export
- * @interface PaginatedLibraryForOwnerList
- */
-export interface PaginatedLibraryForOwnerList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedLibraryForOwnerList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedLibraryForOwnerList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedLibraryForOwnerList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<LibraryForOwner>}
-     * @memberof PaginatedLibraryForOwnerList
-     */
-    results?: Array<LibraryForOwner>;
-}
-
-
diff --git a/types/paginated-license-list.ts b/types/paginated-license-list.ts
deleted file mode 100644
index 054712f7c2d1fb4fc24d27278f6e4852ae7999b9..0000000000000000000000000000000000000000
--- a/types/paginated-license-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { License } from './license';
-
-/**
- * 
- * @export
- * @interface PaginatedLicenseList
- */
-export interface PaginatedLicenseList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedLicenseList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedLicenseList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedLicenseList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<License>}
-     * @memberof PaginatedLicenseList
-     */
-    results?: Array<License>;
-}
-
-
diff --git a/types/paginated-listening-list.ts b/types/paginated-listening-list.ts
deleted file mode 100644
index f39cbde15f6aa8bd65a6d88b68621ed5bca7c4b6..0000000000000000000000000000000000000000
--- a/types/paginated-listening-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Listening } from './listening';
-
-/**
- * 
- * @export
- * @interface PaginatedListeningList
- */
-export interface PaginatedListeningList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedListeningList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedListeningList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedListeningList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Listening>}
-     * @memberof PaginatedListeningList
-     */
-    results?: Array<Listening>;
-}
-
-
diff --git a/types/paginated-manage-actor-list.ts b/types/paginated-manage-actor-list.ts
deleted file mode 100644
index 944493c4d503d34e474b0d1054e4ec2c99f5748d..0000000000000000000000000000000000000000
--- a/types/paginated-manage-actor-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageActor } from './manage-actor';
-
-/**
- * 
- * @export
- * @interface PaginatedManageActorList
- */
-export interface PaginatedManageActorList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageActorList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageActorList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageActorList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageActor>}
-     * @memberof PaginatedManageActorList
-     */
-    results?: Array<ManageActor>;
-}
-
-
diff --git a/types/paginated-manage-album-list.ts b/types/paginated-manage-album-list.ts
deleted file mode 100644
index dd02a42e82ae2930a09e19000d521db98b9fe523..0000000000000000000000000000000000000000
--- a/types/paginated-manage-album-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageAlbum } from './manage-album';
-
-/**
- * 
- * @export
- * @interface PaginatedManageAlbumList
- */
-export interface PaginatedManageAlbumList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageAlbumList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageAlbumList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageAlbumList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageAlbum>}
-     * @memberof PaginatedManageAlbumList
-     */
-    results?: Array<ManageAlbum>;
-}
-
-
diff --git a/types/paginated-manage-artist-list.ts b/types/paginated-manage-artist-list.ts
deleted file mode 100644
index e08a1a3d70c1f3a236dc17a3bc6790e522487ac1..0000000000000000000000000000000000000000
--- a/types/paginated-manage-artist-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageArtist } from './manage-artist';
-
-/**
- * 
- * @export
- * @interface PaginatedManageArtistList
- */
-export interface PaginatedManageArtistList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageArtistList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageArtistList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageArtistList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageArtist>}
-     * @memberof PaginatedManageArtistList
-     */
-    results?: Array<ManageArtist>;
-}
-
-
diff --git a/types/paginated-manage-channel-list.ts b/types/paginated-manage-channel-list.ts
deleted file mode 100644
index 252117409149c0f5467f58f2e62f29eeb788cb8b..0000000000000000000000000000000000000000
--- a/types/paginated-manage-channel-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageChannel } from './manage-channel';
-
-/**
- * 
- * @export
- * @interface PaginatedManageChannelList
- */
-export interface PaginatedManageChannelList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageChannelList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageChannelList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageChannelList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageChannel>}
-     * @memberof PaginatedManageChannelList
-     */
-    results?: Array<ManageChannel>;
-}
-
-
diff --git a/types/paginated-manage-domain-list.ts b/types/paginated-manage-domain-list.ts
deleted file mode 100644
index e2f13170c611e273304072904cad565c33e0a59d..0000000000000000000000000000000000000000
--- a/types/paginated-manage-domain-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageDomain } from './manage-domain';
-
-/**
- * 
- * @export
- * @interface PaginatedManageDomainList
- */
-export interface PaginatedManageDomainList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageDomainList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageDomainList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageDomainList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageDomain>}
-     * @memberof PaginatedManageDomainList
-     */
-    results?: Array<ManageDomain>;
-}
-
-
diff --git a/types/paginated-manage-instance-policy-list.ts b/types/paginated-manage-instance-policy-list.ts
deleted file mode 100644
index 30de3b989405e500d9c39a98107e816a6f4b5777..0000000000000000000000000000000000000000
--- a/types/paginated-manage-instance-policy-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageInstancePolicy } from './manage-instance-policy';
-
-/**
- * 
- * @export
- * @interface PaginatedManageInstancePolicyList
- */
-export interface PaginatedManageInstancePolicyList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageInstancePolicyList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageInstancePolicyList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageInstancePolicyList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageInstancePolicy>}
-     * @memberof PaginatedManageInstancePolicyList
-     */
-    results?: Array<ManageInstancePolicy>;
-}
-
-
diff --git a/types/paginated-manage-invitation-list.ts b/types/paginated-manage-invitation-list.ts
deleted file mode 100644
index ddef2f5787b0c1fbcda394bc4745b286c26c36c1..0000000000000000000000000000000000000000
--- a/types/paginated-manage-invitation-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageInvitation } from './manage-invitation';
-
-/**
- * 
- * @export
- * @interface PaginatedManageInvitationList
- */
-export interface PaginatedManageInvitationList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageInvitationList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageInvitationList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageInvitationList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageInvitation>}
-     * @memberof PaginatedManageInvitationList
-     */
-    results?: Array<ManageInvitation>;
-}
-
-
diff --git a/types/paginated-manage-library-list.ts b/types/paginated-manage-library-list.ts
deleted file mode 100644
index 4a36ac9ebca401c65626c5a47d997a1753b4c755..0000000000000000000000000000000000000000
--- a/types/paginated-manage-library-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageLibrary } from './manage-library';
-
-/**
- * 
- * @export
- * @interface PaginatedManageLibraryList
- */
-export interface PaginatedManageLibraryList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageLibraryList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageLibraryList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageLibraryList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageLibrary>}
-     * @memberof PaginatedManageLibraryList
-     */
-    results?: Array<ManageLibrary>;
-}
-
-
diff --git a/types/paginated-manage-note-list.ts b/types/paginated-manage-note-list.ts
deleted file mode 100644
index e06eb7a1b6562fd603f8a3c2ceb6a2dec595660f..0000000000000000000000000000000000000000
--- a/types/paginated-manage-note-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageNote } from './manage-note';
-
-/**
- * 
- * @export
- * @interface PaginatedManageNoteList
- */
-export interface PaginatedManageNoteList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageNoteList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageNoteList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageNoteList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageNote>}
-     * @memberof PaginatedManageNoteList
-     */
-    results?: Array<ManageNote>;
-}
-
-
diff --git a/types/paginated-manage-report-list.ts b/types/paginated-manage-report-list.ts
deleted file mode 100644
index 3d67e3aeba4bb7d75d08681bf9ed6fce4f9c928f..0000000000000000000000000000000000000000
--- a/types/paginated-manage-report-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageReport } from './manage-report';
-
-/**
- * 
- * @export
- * @interface PaginatedManageReportList
- */
-export interface PaginatedManageReportList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageReportList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageReportList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageReportList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageReport>}
-     * @memberof PaginatedManageReportList
-     */
-    results?: Array<ManageReport>;
-}
-
-
diff --git a/types/paginated-manage-tag-list.ts b/types/paginated-manage-tag-list.ts
deleted file mode 100644
index f2ce939c6a2e256f3c59cb925df3b3182ea7e339..0000000000000000000000000000000000000000
--- a/types/paginated-manage-tag-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageTag } from './manage-tag';
-
-/**
- * 
- * @export
- * @interface PaginatedManageTagList
- */
-export interface PaginatedManageTagList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageTagList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageTagList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageTagList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageTag>}
-     * @memberof PaginatedManageTagList
-     */
-    results?: Array<ManageTag>;
-}
-
-
diff --git a/types/paginated-manage-track-list.ts b/types/paginated-manage-track-list.ts
deleted file mode 100644
index d62b37ba9424d2b152a62771129738b847ffbd32..0000000000000000000000000000000000000000
--- a/types/paginated-manage-track-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageTrack } from './manage-track';
-
-/**
- * 
- * @export
- * @interface PaginatedManageTrackList
- */
-export interface PaginatedManageTrackList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageTrackList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageTrackList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageTrackList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageTrack>}
-     * @memberof PaginatedManageTrackList
-     */
-    results?: Array<ManageTrack>;
-}
-
-
diff --git a/types/paginated-manage-upload-list.ts b/types/paginated-manage-upload-list.ts
deleted file mode 100644
index 85a69749e4ae19951b7107f85966b576a689ca25..0000000000000000000000000000000000000000
--- a/types/paginated-manage-upload-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageUpload } from './manage-upload';
-
-/**
- * 
- * @export
- * @interface PaginatedManageUploadList
- */
-export interface PaginatedManageUploadList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageUploadList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageUploadList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageUploadList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageUpload>}
-     * @memberof PaginatedManageUploadList
-     */
-    results?: Array<ManageUpload>;
-}
-
-
diff --git a/types/paginated-manage-user-list.ts b/types/paginated-manage-user-list.ts
deleted file mode 100644
index feb44e866af727e99cb9ab352bfa44e9be9bbfb0..0000000000000000000000000000000000000000
--- a/types/paginated-manage-user-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageUser } from './manage-user';
-
-/**
- * 
- * @export
- * @interface PaginatedManageUserList
- */
-export interface PaginatedManageUserList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageUserList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageUserList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageUserList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageUser>}
-     * @memberof PaginatedManageUserList
-     */
-    results?: Array<ManageUser>;
-}
-
-
diff --git a/types/paginated-manage-user-request-list.ts b/types/paginated-manage-user-request-list.ts
deleted file mode 100644
index b7bc824b6edf4c3ed6dc766404d2473e4bc6a671..0000000000000000000000000000000000000000
--- a/types/paginated-manage-user-request-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageUserRequest } from './manage-user-request';
-
-/**
- * 
- * @export
- * @interface PaginatedManageUserRequestList
- */
-export interface PaginatedManageUserRequestList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedManageUserRequestList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageUserRequestList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedManageUserRequestList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<ManageUserRequest>}
-     * @memberof PaginatedManageUserRequestList
-     */
-    results?: Array<ManageUserRequest>;
-}
-
-
diff --git a/types/paginated-playlist-list.ts b/types/paginated-playlist-list.ts
deleted file mode 100644
index 02e1417ff55843a0538b274326f4c5037f4a4470..0000000000000000000000000000000000000000
--- a/types/paginated-playlist-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Playlist } from './playlist';
-
-/**
- * 
- * @export
- * @interface PaginatedPlaylistList
- */
-export interface PaginatedPlaylistList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedPlaylistList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedPlaylistList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedPlaylistList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Playlist>}
-     * @memberof PaginatedPlaylistList
-     */
-    results?: Array<Playlist>;
-}
-
-
diff --git a/types/paginated-radio-list.ts b/types/paginated-radio-list.ts
deleted file mode 100644
index f335e75b285039e1ed33e8b481c34171608a28d3..0000000000000000000000000000000000000000
--- a/types/paginated-radio-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Radio } from './radio';
-
-/**
- * 
- * @export
- * @interface PaginatedRadioList
- */
-export interface PaginatedRadioList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedRadioList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedRadioList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedRadioList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Radio>}
-     * @memberof PaginatedRadioList
-     */
-    results?: Array<Radio>;
-}
-
-
diff --git a/types/paginated-subscription-list.ts b/types/paginated-subscription-list.ts
deleted file mode 100644
index e9322cd2405e1e7be23b58ed56110dc71bd7397f..0000000000000000000000000000000000000000
--- a/types/paginated-subscription-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Subscription } from './subscription';
-
-/**
- * 
- * @export
- * @interface PaginatedSubscriptionList
- */
-export interface PaginatedSubscriptionList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedSubscriptionList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedSubscriptionList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedSubscriptionList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Subscription>}
-     * @memberof PaginatedSubscriptionList
-     */
-    results?: Array<Subscription>;
-}
-
-
diff --git a/types/paginated-tag-list.ts b/types/paginated-tag-list.ts
deleted file mode 100644
index 17d171bb31d0fc55c469d9b84bbe19fd48d171ec..0000000000000000000000000000000000000000
--- a/types/paginated-tag-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Tag } from './tag';
-
-/**
- * 
- * @export
- * @interface PaginatedTagList
- */
-export interface PaginatedTagList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedTagList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedTagList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedTagList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Tag>}
-     * @memberof PaginatedTagList
-     */
-    results?: Array<Tag>;
-}
-
-
diff --git a/types/paginated-track-list.ts b/types/paginated-track-list.ts
deleted file mode 100644
index 86fa4258b2cdd05196623c859c3bbb8d59f2ab86..0000000000000000000000000000000000000000
--- a/types/paginated-track-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Track } from './track';
-
-/**
- * 
- * @export
- * @interface PaginatedTrackList
- */
-export interface PaginatedTrackList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedTrackList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedTrackList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedTrackList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<Track>}
-     * @memberof PaginatedTrackList
-     */
-    results?: Array<Track>;
-}
-
-
diff --git a/types/paginated-upload-for-owner-list.ts b/types/paginated-upload-for-owner-list.ts
deleted file mode 100644
index 0a1be232d84c915ee854dd3635735f223e75739e..0000000000000000000000000000000000000000
--- a/types/paginated-upload-for-owner-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { UploadForOwner } from './upload-for-owner';
-
-/**
- * 
- * @export
- * @interface PaginatedUploadForOwnerList
- */
-export interface PaginatedUploadForOwnerList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedUploadForOwnerList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedUploadForOwnerList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedUploadForOwnerList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<UploadForOwner>}
-     * @memberof PaginatedUploadForOwnerList
-     */
-    results?: Array<UploadForOwner>;
-}
-
-
diff --git a/types/paginated-user-filter-list.ts b/types/paginated-user-filter-list.ts
deleted file mode 100644
index 325dab351e751a809df108a613fdbda7d31348d4..0000000000000000000000000000000000000000
--- a/types/paginated-user-filter-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { UserFilter } from './user-filter';
-
-/**
- * 
- * @export
- * @interface PaginatedUserFilterList
- */
-export interface PaginatedUserFilterList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedUserFilterList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedUserFilterList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedUserFilterList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<UserFilter>}
-     * @memberof PaginatedUserFilterList
-     */
-    results?: Array<UserFilter>;
-}
-
-
diff --git a/types/paginated-user-track-favorite-list.ts b/types/paginated-user-track-favorite-list.ts
deleted file mode 100644
index 2d236babae155478444d28b5010c2af0a7780481..0000000000000000000000000000000000000000
--- a/types/paginated-user-track-favorite-list.ts
+++ /dev/null
@@ -1,49 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { UserTrackFavorite } from './user-track-favorite';
-
-/**
- * 
- * @export
- * @interface PaginatedUserTrackFavoriteList
- */
-export interface PaginatedUserTrackFavoriteList {
-    /**
-     * 
-     * @type {number}
-     * @memberof PaginatedUserTrackFavoriteList
-     */
-    count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedUserTrackFavoriteList
-     */
-    next?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PaginatedUserTrackFavoriteList
-     */
-    previous?: string | null;
-    /**
-     * 
-     * @type {Array<UserTrackFavorite>}
-     * @memberof PaginatedUserTrackFavoriteList
-     */
-    results?: Array<UserTrackFavorite>;
-}
-
-
diff --git a/types/password-change.ts b/types/password-change.ts
deleted file mode 100644
index f861cb0e9961740f54d41a45efd9e5c68ffecd00..0000000000000000000000000000000000000000
--- a/types/password-change.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface PasswordChange
- */
-export interface PasswordChange {
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordChange
-     */
-    old_password: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordChange
-     */
-    new_password1: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordChange
-     */
-    new_password2: string;
-}
-
-
diff --git a/types/password-reset-confirm.ts b/types/password-reset-confirm.ts
deleted file mode 100644
index 4c8176da7bb11e369f97cd5acacac771a350d5e1..0000000000000000000000000000000000000000
--- a/types/password-reset-confirm.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * Serializer for requesting a password reset e-mail.
- * @export
- * @interface PasswordResetConfirm
- */
-export interface PasswordResetConfirm {
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordResetConfirm
-     */
-    new_password1: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordResetConfirm
-     */
-    new_password2: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordResetConfirm
-     */
-    uid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordResetConfirm
-     */
-    token: string;
-}
-
-
diff --git a/types/password-reset.ts b/types/password-reset.ts
deleted file mode 100644
index b34f23f2375fcc5a3dfe688be0085993f16a9b20..0000000000000000000000000000000000000000
--- a/types/password-reset.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * Serializer for requesting a password reset e-mail.
- * @export
- * @interface PasswordReset
- */
-export interface PasswordReset {
-    /**
-     * 
-     * @type {string}
-     * @memberof PasswordReset
-     */
-    email: string;
-}
-
-
diff --git a/types/patched-application.ts b/types/patched-application.ts
deleted file mode 100644
index 1477c87a39c0e288740bae72940541bce5b1b430..0000000000000000000000000000000000000000
--- a/types/patched-application.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface PatchedApplication
- */
-export interface PatchedApplication {
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedApplication
-     */
-    client_id?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedApplication
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedApplication
-     */
-    scopes?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedApplication
-     */
-    created?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedApplication
-     */
-    updated?: string;
-}
-
-
diff --git a/types/patched-channel-update.ts b/types/patched-channel-update.ts
deleted file mode 100644
index 0b37382fe7b1efc48a1606aec7f2d85530d3711c..0000000000000000000000000000000000000000
--- a/types/patched-channel-update.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Content } from './content';
-import { ContentCategoryEnum } from './content-category-enum';
-
-/**
- * 
- * @export
- * @interface PatchedChannelUpdate
- */
-export interface PatchedChannelUpdate {
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedChannelUpdate
-     */
-    cover?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedChannelUpdate
-     */
-    name?: string;
-    /**
-     * 
-     * @type {Content}
-     * @memberof PatchedChannelUpdate
-     */
-    description?: Content | null;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof PatchedChannelUpdate
-     */
-    tags?: Array<string>;
-    /**
-     * 
-     * @type {ContentCategoryEnum}
-     * @memberof PatchedChannelUpdate
-     */
-    content_category?: ContentCategoryEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedChannelUpdate
-     */
-    metadata?: { [key: string]: any; };
-}
-
-
diff --git a/types/patched-global-preference.ts b/types/patched-global-preference.ts
deleted file mode 100644
index e269165b2483064e8bfa6c656744fba281c9ced0..0000000000000000000000000000000000000000
--- a/types/patched-global-preference.ts
+++ /dev/null
@@ -1,78 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface PatchedGlobalPreference
- */
-export interface PatchedGlobalPreference {
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    section?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    identifier?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    _default?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    value?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    verbose_name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    help_text?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    additional_data?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedGlobalPreference
-     */
-    field?: string;
-}
-
-
diff --git a/types/patched-inbox-item.ts b/types/patched-inbox-item.ts
deleted file mode 100644
index 753c6fade8a0cdb3f25ad4b82742f437cb11ced3..0000000000000000000000000000000000000000
--- a/types/patched-inbox-item.ts
+++ /dev/null
@@ -1,50 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Activity } from './activity';
-import { InboxItemTypeEnum } from './inbox-item-type-enum';
-
-/**
- * 
- * @export
- * @interface PatchedInboxItem
- */
-export interface PatchedInboxItem {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedInboxItem
-     */
-    id?: number;
-    /**
-     * 
-     * @type {InboxItemTypeEnum}
-     * @memberof PatchedInboxItem
-     */
-    type?: InboxItemTypeEnum;
-    /**
-     * 
-     * @type {Activity}
-     * @memberof PatchedInboxItem
-     */
-    activity?: Activity;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedInboxItem
-     */
-    is_read?: boolean;
-}
-
-
diff --git a/types/patched-library-for-owner.ts b/types/patched-library-for-owner.ts
deleted file mode 100644
index e6d86d3ca77ed9b7be5d1622fc96559890348256..0000000000000000000000000000000000000000
--- a/types/patched-library-for-owner.ts
+++ /dev/null
@@ -1,80 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { LibraryPrivacyLevelEnum } from './library-privacy-level-enum';
-
-/**
- * 
- * @export
- * @interface PatchedLibraryForOwner
- */
-export interface PatchedLibraryForOwner {
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedLibraryForOwner
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedLibraryForOwner
-     */
-    fid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedLibraryForOwner
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedLibraryForOwner
-     */
-    description?: string | null;
-    /**
-     * 
-     * @type {LibraryPrivacyLevelEnum}
-     * @memberof PatchedLibraryForOwner
-     */
-    privacy_level?: LibraryPrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedLibraryForOwner
-     */
-    uploads_count?: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedLibraryForOwner
-     */
-    size?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedLibraryForOwner
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof PatchedLibraryForOwner
-     */
-    actor?: APIActor;
-}
-
-
diff --git a/types/patched-manage-domain-update.ts b/types/patched-manage-domain-update.ts
deleted file mode 100644
index 1209f8a2812c6a79a532bffed09d86569782589e..0000000000000000000000000000000000000000
--- a/types/patched-manage-domain-update.ts
+++ /dev/null
@@ -1,72 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface PatchedManageDomainUpdate
- */
-export interface PatchedManageDomainUpdate {
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageDomainUpdate
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageDomainUpdate
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageDomainUpdate
-     */
-    actors_count?: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageDomainUpdate
-     */
-    outbox_activities_count?: number;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedManageDomainUpdate
-     */
-    nodeinfo?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageDomainUpdate
-     */
-    nodeinfo_fetch_date?: string | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageDomainUpdate
-     */
-    instance_policy?: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageDomainUpdate
-     */
-    allowed?: boolean | null;
-}
-
-
diff --git a/types/patched-manage-instance-policy.ts b/types/patched-manage-instance-policy.ts
deleted file mode 100644
index a40baf4d9318c1ca8bbcaa292c65de14ebbaf91a..0000000000000000000000000000000000000000
--- a/types/patched-manage-instance-policy.ts
+++ /dev/null
@@ -1,91 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageTarget } from './manage-target';
-
-/**
- * 
- * @export
- * @interface PatchedManageInstancePolicy
- */
-export interface PatchedManageInstancePolicy {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageInstancePolicy
-     */
-    id?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageInstancePolicy
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {ManageTarget}
-     * @memberof PatchedManageInstancePolicy
-     */
-    target?: ManageTarget;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageInstancePolicy
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageInstancePolicy
-     */
-    actor?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageInstancePolicy
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageInstancePolicy
-     */
-    is_active?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageInstancePolicy
-     */
-    block_all?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageInstancePolicy
-     */
-    silence_activity?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageInstancePolicy
-     */
-    silence_notifications?: boolean;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageInstancePolicy
-     */
-    reject_media?: boolean;
-}
-
-
diff --git a/types/patched-manage-invitation.ts b/types/patched-manage-invitation.ts
deleted file mode 100644
index ac1a35359a692db9242219ae4cbb19c08fb7e0c7..0000000000000000000000000000000000000000
--- a/types/patched-manage-invitation.ts
+++ /dev/null
@@ -1,61 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageUserSimple } from './manage-user-simple';
-
-/**
- * 
- * @export
- * @interface PatchedManageInvitation
- */
-export interface PatchedManageInvitation {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageInvitation
-     */
-    id?: number;
-    /**
-     * 
-     * @type {ManageUserSimple}
-     * @memberof PatchedManageInvitation
-     */
-    owner?: ManageUserSimple;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageInvitation
-     */
-    code?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageInvitation
-     */
-    expiration_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageInvitation
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {Array<ManageUserSimple>}
-     * @memberof PatchedManageInvitation
-     */
-    users?: Array<ManageUserSimple>;
-}
-
-
diff --git a/types/patched-manage-library.ts b/types/patched-manage-library.ts
deleted file mode 100644
index efec3650ffbeebf42b2ea5b702daa1cf995b2dec..0000000000000000000000000000000000000000
--- a/types/patched-manage-library.ts
+++ /dev/null
@@ -1,110 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { LibraryPrivacyLevelEnum } from './library-privacy-level-enum';
-import { ManageBaseActor } from './manage-base-actor';
-
-/**
- * 
- * @export
- * @interface PatchedManageLibrary
- */
-export interface PatchedManageLibrary {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageLibrary
-     */
-    id?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    fid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    url?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    description?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    domain?: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageLibrary
-     */
-    is_local?: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {LibraryPrivacyLevelEnum}
-     * @memberof PatchedManageLibrary
-     */
-    privacy_level?: LibraryPrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageLibrary
-     */
-    uploads_count?: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageLibrary
-     */
-    followers_count?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageLibrary
-     */
-    followers_url?: string;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof PatchedManageLibrary
-     */
-    actor?: ManageBaseActor;
-}
-
-
diff --git a/types/patched-manage-report.ts b/types/patched-manage-report.ts
deleted file mode 100644
index 1ad895ac52e9653601315919727efdd2304461c7..0000000000000000000000000000000000000000
--- a/types/patched-manage-report.ts
+++ /dev/null
@@ -1,117 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageBaseActor } from './manage-base-actor';
-import { ManageBaseNote } from './manage-base-note';
-import { ReportTypeEnum } from './report-type-enum';
-
-/**
- * 
- * @export
- * @interface PatchedManageReport
- */
-export interface PatchedManageReport {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageReport
-     */
-    id?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageReport
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageReport
-     */
-    fid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageReport
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageReport
-     */
-    handled_date?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageReport
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {ReportTypeEnum}
-     * @memberof PatchedManageReport
-     */
-    type?: ReportTypeEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedManageReport
-     */
-    target?: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedManageReport
-     */
-    target_state?: { [key: string]: any; } | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedManageReport
-     */
-    is_handled?: boolean;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof PatchedManageReport
-     */
-    assigned_to?: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof PatchedManageReport
-     */
-    target_owner?: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof PatchedManageReport
-     */
-    submitter?: ManageBaseActor;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageReport
-     */
-    submitter_email?: string | null;
-    /**
-     * 
-     * @type {ManageBaseNote}
-     * @memberof PatchedManageReport
-     */
-    notes?: ManageBaseNote;
-}
-
-
diff --git a/types/patched-manage-user-request.ts b/types/patched-manage-user-request.ts
deleted file mode 100644
index 611faae0c10fe1cb0830c8881ba6ce13e81fe286..0000000000000000000000000000000000000000
--- a/types/patched-manage-user-request.ts
+++ /dev/null
@@ -1,88 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ManageBaseActor } from './manage-base-actor';
-import { ManageBaseNote } from './manage-base-note';
-import { ManageUserRequestStatusEnum } from './manage-user-request-status-enum';
-import { ManageUserRequestTypeEnum } from './manage-user-request-type-enum';
-
-/**
- * 
- * @export
- * @interface PatchedManageUserRequest
- */
-export interface PatchedManageUserRequest {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageUserRequest
-     */
-    id?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUserRequest
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUserRequest
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUserRequest
-     */
-    handled_date?: string | null;
-    /**
-     * 
-     * @type {ManageUserRequestTypeEnum}
-     * @memberof PatchedManageUserRequest
-     */
-    type?: ManageUserRequestTypeEnum;
-    /**
-     * 
-     * @type {ManageUserRequestStatusEnum}
-     * @memberof PatchedManageUserRequest
-     */
-    status?: ManageUserRequestStatusEnum;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof PatchedManageUserRequest
-     */
-    assigned_to?: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseActor}
-     * @memberof PatchedManageUserRequest
-     */
-    submitter?: ManageBaseActor;
-    /**
-     * 
-     * @type {ManageBaseNote}
-     * @memberof PatchedManageUserRequest
-     */
-    notes?: ManageBaseNote;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedManageUserRequest
-     */
-    metadata?: { [key: string]: any; } | null;
-}
-
-
diff --git a/types/patched-manage-user.ts b/types/patched-manage-user.ts
deleted file mode 100644
index 8fbd28ca3eaab7fc0b2a3107db27cbdef5a72328..0000000000000000000000000000000000000000
--- a/types/patched-manage-user.ts
+++ /dev/null
@@ -1,103 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { PrivacyLevelEnum } from './privacy-level-enum';
-
-/**
- * 
- * @export
- * @interface PatchedManageUser
- */
-export interface PatchedManageUser {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageUser
-     */
-    id?: number;
-    /**
-     * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
-     * @type {string}
-     * @memberof PatchedManageUser
-     */
-    username?: string;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedManageUser
-     */
-    actor?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUser
-     */
-    email?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUser
-     */
-    name?: string;
-    /**
-     * Designates whether this user should be treated as active. Unselect this instead of deleting accounts.
-     * @type {boolean}
-     * @memberof PatchedManageUser
-     */
-    is_active?: boolean;
-    /**
-     * Designates whether the user can log into this admin site.
-     * @type {boolean}
-     * @memberof PatchedManageUser
-     */
-    is_staff?: boolean;
-    /**
-     * Designates that this user has all permissions without explicitly assigning them.
-     * @type {boolean}
-     * @memberof PatchedManageUser
-     */
-    is_superuser?: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUser
-     */
-    date_joined?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUser
-     */
-    last_activity?: string | null;
-    /**
-     * 
-     * @type {PrivacyLevelEnum}
-     * @memberof PatchedManageUser
-     */
-    privacy_level?: PrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedManageUser
-     */
-    upload_quota?: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedManageUser
-     */
-    full_username?: string;
-}
-
-
diff --git a/types/patched-playlist.ts b/types/patched-playlist.ts
deleted file mode 100644
index aeaa425dd602c51c380c5ba77b01a13138b72f30..0000000000000000000000000000000000000000
--- a/types/patched-playlist.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { PrivacyLevelEnum } from './privacy-level-enum';
-import { UserBasic } from './user-basic';
-
-/**
- * 
- * @export
- * @interface PatchedPlaylist
- */
-export interface PatchedPlaylist {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedPlaylist
-     */
-    id?: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedPlaylist
-     */
-    name?: string;
-    /**
-     * 
-     * @type {UserBasic}
-     * @memberof PatchedPlaylist
-     */
-    user?: UserBasic;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedPlaylist
-     */
-    modification_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedPlaylist
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {PrivacyLevelEnum}
-     * @memberof PatchedPlaylist
-     */
-    privacy_level?: PrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedPlaylist
-     */
-    tracks_count?: number;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof PatchedPlaylist
-     */
-    album_covers?: Array<string>;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedPlaylist
-     */
-    duration?: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedPlaylist
-     */
-    is_playable?: boolean;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof PatchedPlaylist
-     */
-    actor?: APIActor;
-}
-
-
diff --git a/types/patched-radio.ts b/types/patched-radio.ts
deleted file mode 100644
index a164212bf0d68e971e3618910cfc8109dbd80ec6..0000000000000000000000000000000000000000
--- a/types/patched-radio.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { UserBasic } from './user-basic';
-
-/**
- * 
- * @export
- * @interface PatchedRadio
- */
-export interface PatchedRadio {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedRadio
-     */
-    id?: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof PatchedRadio
-     */
-    is_public?: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedRadio
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedRadio
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {UserBasic}
-     * @memberof PatchedRadio
-     */
-    user?: UserBasic;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedRadio
-     */
-    config?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedRadio
-     */
-    description?: string;
-}
-
-
diff --git a/types/patched-upload-for-owner.ts b/types/patched-upload-for-owner.ts
deleted file mode 100644
index 19bc28d1b98a1720b8702dc700ef35d19b398955..0000000000000000000000000000000000000000
--- a/types/patched-upload-for-owner.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Track } from './track';
-import { UploadForOwnerImportStatusEnum } from './upload-for-owner-import-status-enum';
-
-/**
- * 
- * @export
- * @interface PatchedUploadForOwner
- */
-export interface PatchedUploadForOwner {
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    uuid?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    filename?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    mimetype?: string | null;
-    /**
-     * 
-     * @type {Track}
-     * @memberof PatchedUploadForOwner
-     */
-    track?: Track | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    library?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    channel?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedUploadForOwner
-     */
-    duration?: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedUploadForOwner
-     */
-    bitrate?: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedUploadForOwner
-     */
-    size?: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    import_date?: string | null;
-    /**
-     * 
-     * @type {UploadForOwnerImportStatusEnum}
-     * @memberof PatchedUploadForOwner
-     */
-    import_status?: UploadForOwnerImportStatusEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedUploadForOwner
-     */
-    import_details?: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedUploadForOwner
-     */
-    import_metadata?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    import_reference?: string;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof PatchedUploadForOwner
-     */
-    metadata?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    source?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUploadForOwner
-     */
-    audio_file?: string;
-}
-
-
diff --git a/types/patched-user-details.ts b/types/patched-user-details.ts
deleted file mode 100644
index a63ca4d4357d28323098e6d874d4780458921dba..0000000000000000000000000000000000000000
--- a/types/patched-user-details.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * User model w/o password
- * @export
- * @interface PatchedUserDetails
- */
-export interface PatchedUserDetails {
-    /**
-     * 
-     * @type {number}
-     * @memberof PatchedUserDetails
-     */
-    pk?: number;
-    /**
-     * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
-     * @type {string}
-     * @memberof PatchedUserDetails
-     */
-    username?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUserDetails
-     */
-    email?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUserDetails
-     */
-    first_name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUserDetails
-     */
-    last_name?: string;
-}
-
-
diff --git a/types/patched-user-write.ts b/types/patched-user-write.ts
deleted file mode 100644
index 5310aff6d58f388cf7ad5487051b56e89f5f284a..0000000000000000000000000000000000000000
--- a/types/patched-user-write.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Content } from './content';
-import { PrivacyLevelEnum } from './privacy-level-enum';
-
-/**
- * 
- * @export
- * @interface PatchedUserWrite
- */
-export interface PatchedUserWrite {
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUserWrite
-     */
-    name?: string;
-    /**
-     * 
-     * @type {PrivacyLevelEnum}
-     * @memberof PatchedUserWrite
-     */
-    privacy_level?: PrivacyLevelEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUserWrite
-     */
-    avatar?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUserWrite
-     */
-    instance_support_message_display_date?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof PatchedUserWrite
-     */
-    funkwhale_support_message_display_date?: string | null;
-    /**
-     * 
-     * @type {Content}
-     * @memberof PatchedUserWrite
-     */
-    summary?: Content | null;
-}
-
-
diff --git a/types/playlist.ts b/types/playlist.ts
deleted file mode 100644
index 3e05ae59a5e3361a4534558a75b86b1d45550dad..0000000000000000000000000000000000000000
--- a/types/playlist.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { PrivacyLevelEnum } from './privacy-level-enum';
-import { UserBasic } from './user-basic';
-
-/**
- * 
- * @export
- * @interface Playlist
- */
-export interface Playlist {
-    /**
-     * 
-     * @type {number}
-     * @memberof Playlist
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof Playlist
-     */
-    name: string;
-    /**
-     * 
-     * @type {UserBasic}
-     * @memberof Playlist
-     */
-    user: UserBasic;
-    /**
-     * 
-     * @type {string}
-     * @memberof Playlist
-     */
-    modification_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Playlist
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {PrivacyLevelEnum}
-     * @memberof Playlist
-     */
-    privacy_level?: PrivacyLevelEnum;
-    /**
-     * 
-     * @type {number}
-     * @memberof Playlist
-     */
-    tracks_count: number;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof Playlist
-     */
-    album_covers: Array<string>;
-    /**
-     * 
-     * @type {number}
-     * @memberof Playlist
-     */
-    duration: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Playlist
-     */
-    is_playable: boolean;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Playlist
-     */
-    actor: APIActor;
-}
-
-
diff --git a/types/privacy-level-enum.ts b/types/privacy-level-enum.ts
deleted file mode 100644
index ca96d556456d38eea8944a43078c520e53377964..0000000000000000000000000000000000000000
--- a/types/privacy-level-enum.ts
+++ /dev/null
@@ -1,29 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum PrivacyLevelEnum {
-    Me = 'me',
-    Followers = 'followers',
-    Instance = 'instance',
-    Everyone = 'everyone'
-}
-
-
-
diff --git a/types/radio-session-track-serializer-create.ts b/types/radio-session-track-serializer-create.ts
deleted file mode 100644
index 9937993638b91ce482b8bcba5f0891e826266257..0000000000000000000000000000000000000000
--- a/types/radio-session-track-serializer-create.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface RadioSessionTrackSerializerCreate
- */
-export interface RadioSessionTrackSerializerCreate {
-    /**
-     * 
-     * @type {number}
-     * @memberof RadioSessionTrackSerializerCreate
-     */
-    session: number;
-}
-
-
diff --git a/types/radio-session.ts b/types/radio-session.ts
deleted file mode 100644
index 7f815b7ee27764a8ef5b6f567dd3589cc055955a..0000000000000000000000000000000000000000
--- a/types/radio-session.ts
+++ /dev/null
@@ -1,66 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface RadioSession
- */
-export interface RadioSession {
-    /**
-     * 
-     * @type {number}
-     * @memberof RadioSession
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof RadioSession
-     */
-    radio_type: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof RadioSession
-     */
-    related_object_id?: string | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof RadioSession
-     */
-    user?: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof RadioSession
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof RadioSession
-     */
-    custom_radio?: number | null;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof RadioSession
-     */
-    config?: { [key: string]: any; } | null;
-}
-
-
diff --git a/types/radio.ts b/types/radio.ts
deleted file mode 100644
index 24cb262bf27e798e0ab3a314d95384546e409947..0000000000000000000000000000000000000000
--- a/types/radio.ts
+++ /dev/null
@@ -1,67 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { UserBasic } from './user-basic';
-
-/**
- * 
- * @export
- * @interface Radio
- */
-export interface Radio {
-    /**
-     * 
-     * @type {number}
-     * @memberof Radio
-     */
-    id: number;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Radio
-     */
-    is_public?: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof Radio
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Radio
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {UserBasic}
-     * @memberof Radio
-     */
-    user: UserBasic;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Radio
-     */
-    config: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof Radio
-     */
-    description?: string;
-}
-
-
diff --git a/types/rate-limit.ts b/types/rate-limit.ts
deleted file mode 100644
index cf3f35eba12f9c928678a4cbc3d481dccd4691ab..0000000000000000000000000000000000000000
--- a/types/rate-limit.ts
+++ /dev/null
@@ -1,44 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Ident } from './ident';
-import { Scopes } from './scopes';
-
-/**
- * 
- * @export
- * @interface RateLimit
- */
-export interface RateLimit {
-    /**
-     * 
-     * @type {boolean}
-     * @memberof RateLimit
-     */
-    enabled: boolean;
-    /**
-     * 
-     * @type {Ident}
-     * @memberof RateLimit
-     */
-    ident: Ident;
-    /**
-     * 
-     * @type {Array<Scopes>}
-     * @memberof RateLimit
-     */
-    scopes: Array<Scopes>;
-}
-
-
diff --git a/types/register.ts b/types/register.ts
deleted file mode 100644
index b9aca35adc7738ccb49c96a4d7c3fc7bf8ba953a..0000000000000000000000000000000000000000
--- a/types/register.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Register
- */
-export interface Register {
-    /**
-     * 
-     * @type {string}
-     * @memberof Register
-     */
-    username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Register
-     */
-    email: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Register
-     */
-    password1: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Register
-     */
-    password2: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Register
-     */
-    invitation?: string | null;
-}
-
-
diff --git a/types/report-type-enum.ts b/types/report-type-enum.ts
deleted file mode 100644
index 318801f5d9cc37547728c9f38824fd675ea68eca..0000000000000000000000000000000000000000
--- a/types/report-type-enum.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum ReportTypeEnum {
-    TakedownRequest = 'takedown_request',
-    InvalidMetadata = 'invalid_metadata',
-    IllegalContent = 'illegal_content',
-    OffensiveContent = 'offensive_content',
-    Other = 'other'
-}
-
-
-
diff --git a/types/report-type.ts b/types/report-type.ts
deleted file mode 100644
index 1522bd4226a3991a2c1bb6260885518f31a6dec3..0000000000000000000000000000000000000000
--- a/types/report-type.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface ReportType
- */
-export interface ReportType {
-    /**
-     * 
-     * @type {string}
-     * @memberof ReportType
-     */
-    type: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof ReportType
-     */
-    label: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof ReportType
-     */
-    anonymous: boolean;
-}
-
-
diff --git a/types/report.ts b/types/report.ts
deleted file mode 100644
index 2e71b769882cce849389c1792e2e33a00ebe0ae9..0000000000000000000000000000000000000000
--- a/types/report.ts
+++ /dev/null
@@ -1,73 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ReportTypeEnum } from './report-type-enum';
-
-/**
- * 
- * @export
- * @interface Report
- */
-export interface Report {
-    /**
-     * 
-     * @type {string}
-     * @memberof Report
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Report
-     */
-    summary?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof Report
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Report
-     */
-    handled_date: string | null;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Report
-     */
-    is_handled: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof Report
-     */
-    submitter_email?: string | null;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof Report
-     */
-    target: { [key: string]: any; };
-    /**
-     * 
-     * @type {ReportTypeEnum}
-     * @memberof Report
-     */
-    type: ReportTypeEnum;
-}
-
-
diff --git a/types/scopes.ts b/types/scopes.ts
deleted file mode 100644
index 2a2b654106b7ea408edbaddb8033433f333bfc33..0000000000000000000000000000000000000000
--- a/types/scopes.ts
+++ /dev/null
@@ -1,84 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Scopes
- */
-export interface Scopes {
-    /**
-     * 
-     * @type {string}
-     * @memberof Scopes
-     */
-    id: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Scopes
-     */
-    rate: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Scopes
-     */
-    description: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof Scopes
-     */
-    limit: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Scopes
-     */
-    duration: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Scopes
-     */
-    remaining: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Scopes
-     */
-    available: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Scopes
-     */
-    available_seconds: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Scopes
-     */
-    reset: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Scopes
-     */
-    reset_seconds: number;
-}
-
-
diff --git a/types/services.ts b/types/services.ts
deleted file mode 100644
index e5a59ea1c4775455f1809f06e3ff3e3579200cad..0000000000000000000000000000000000000000
--- a/types/services.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Services
- */
-export interface Services {
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof Services
-     */
-    inbound?: Array<string>;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof Services
-     */
-    outbound?: Array<string>;
-}
-
-
diff --git a/types/simple-artist.ts b/types/simple-artist.ts
deleted file mode 100644
index 71c56872bb283bfe8b4444e48b9a8ef928b14581..0000000000000000000000000000000000000000
--- a/types/simple-artist.ts
+++ /dev/null
@@ -1,93 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Content } from './content';
-import { ContentCategoryEnum } from './content-category-enum';
-import { CoverField } from './cover-field';
-
-/**
- * 
- * @export
- * @interface SimpleArtist
- */
-export interface SimpleArtist {
-    /**
-     * 
-     * @type {number}
-     * @memberof SimpleArtist
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof SimpleArtist
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof SimpleArtist
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof SimpleArtist
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof SimpleArtist
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof SimpleArtist
-     */
-    modification_date?: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof SimpleArtist
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {ContentCategoryEnum}
-     * @memberof SimpleArtist
-     */
-    content_category?: ContentCategoryEnum;
-    /**
-     * 
-     * @type {Content}
-     * @memberof SimpleArtist
-     */
-    description: Content;
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof SimpleArtist
-     */
-    attachment_cover: CoverField;
-    /**
-     * 
-     * @type {number}
-     * @memberof SimpleArtist
-     */
-    channel: number;
-}
-
-
diff --git a/types/software.ts b/types/software.ts
deleted file mode 100644
index acfc63c9e2844377e04eb392063e3e12e58572d4..0000000000000000000000000000000000000000
--- a/types/software.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Software
- */
-export interface Software {
-    /**
-     * 
-     * @type {string}
-     * @memberof Software
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Software
-     */
-    version: string;
-}
-
-
diff --git a/types/subscription.ts b/types/subscription.ts
deleted file mode 100644
index 09eeaf39e6604d46db2482d441cbbe25d9bf584b..0000000000000000000000000000000000000000
--- a/types/subscription.ts
+++ /dev/null
@@ -1,48 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Subscription
- */
-export interface Subscription {
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Subscription
-     */
-    approved: boolean;
-    /**
-     * 
-     * @type {string}
-     * @memberof Subscription
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Subscription
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Subscription
-     */
-    creation_date: string;
-}
-
-
diff --git a/types/tag.ts b/types/tag.ts
deleted file mode 100644
index df517170bc49bca9e6472fee3f0239cc773c0ecd..0000000000000000000000000000000000000000
--- a/types/tag.ts
+++ /dev/null
@@ -1,36 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface Tag
- */
-export interface Tag {
-    /**
-     * 
-     * @type {string}
-     * @memberof Tag
-     */
-    name: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Tag
-     */
-    creation_date?: string;
-}
-
-
diff --git a/types/total-count.ts b/types/total-count.ts
deleted file mode 100644
index e0658cb1f03da755d3c96df013300dc9743ecc99..0000000000000000000000000000000000000000
--- a/types/total-count.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface TotalCount
- */
-export interface TotalCount {
-    /**
-     * 
-     * @type {number}
-     * @memberof TotalCount
-     */
-    total: number;
-}
-
-
diff --git a/types/track-album.ts b/types/track-album.ts
deleted file mode 100644
index 8223d4d24f5d398933390ee4fed7d4c847d519bd..0000000000000000000000000000000000000000
--- a/types/track-album.ts
+++ /dev/null
@@ -1,86 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { CoverField } from './cover-field';
-import { SimpleArtist } from './simple-artist';
-
-/**
- * 
- * @export
- * @interface TrackAlbum
- */
-export interface TrackAlbum {
-    /**
-     * 
-     * @type {number}
-     * @memberof TrackAlbum
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof TrackAlbum
-     */
-    fid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof TrackAlbum
-     */
-    mbid?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof TrackAlbum
-     */
-    title: string;
-    /**
-     * 
-     * @type {SimpleArtist}
-     * @memberof TrackAlbum
-     */
-    artist: SimpleArtist;
-    /**
-     * 
-     * @type {string}
-     * @memberof TrackAlbum
-     */
-    release_date?: string | null;
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof TrackAlbum
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {string}
-     * @memberof TrackAlbum
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof TrackAlbum
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof TrackAlbum
-     */
-    tracks_count: number;
-}
-
-
diff --git a/types/track.ts b/types/track.ts
deleted file mode 100644
index af0b6f343ece5d575a24264d7c3caad0e41e8cbc..0000000000000000000000000000000000000000
--- a/types/track.ts
+++ /dev/null
@@ -1,142 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { CoverField } from './cover-field';
-import { SimpleArtist } from './simple-artist';
-import { TrackAlbum } from './track-album';
-
-/**
- * 
- * @export
- * @interface Track
- */
-export interface Track {
-    /**
-     * 
-     * @type {CoverField}
-     * @memberof Track
-     */
-    cover: CoverField;
-    /**
-     * 
-     * @type {SimpleArtist}
-     * @memberof Track
-     */
-    artist: SimpleArtist;
-    /**
-     * 
-     * @type {TrackAlbum}
-     * @memberof Track
-     */
-    album: TrackAlbum;
-    /**
-     * 
-     * @type {Array<object>}
-     * @memberof Track
-     */
-    uploads: Array<object>;
-    /**
-     * 
-     * @type {string}
-     * @memberof Track
-     */
-    listen_url: string;
-    /**
-     * 
-     * @type {Array<string>}
-     * @memberof Track
-     */
-    tags: Array<string>;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof Track
-     */
-    attributed_to: APIActor;
-    /**
-     * 
-     * @type {number}
-     * @memberof Track
-     */
-    id: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof Track
-     */
-    fid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Track
-     */
-    mbid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Track
-     */
-    title: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Track
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Track
-     */
-    is_local: boolean;
-    /**
-     * 
-     * @type {number}
-     * @memberof Track
-     */
-    position: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Track
-     */
-    disc_number: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof Track
-     */
-    downloads_count: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof Track
-     */
-    copyright: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof Track
-     */
-    license: string;
-    /**
-     * 
-     * @type {boolean}
-     * @memberof Track
-     */
-    is_playable: boolean;
-}
-
-
diff --git a/types/upload-for-owner-import-status-enum.ts b/types/upload-for-owner-import-status-enum.ts
deleted file mode 100644
index 2c805cb8b0e41f16d0f06ae48eb97ee5a4247e5f..0000000000000000000000000000000000000000
--- a/types/upload-for-owner-import-status-enum.ts
+++ /dev/null
@@ -1,27 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @enum {string}
- */
-export enum UploadForOwnerImportStatusEnum {
-    Draft = 'draft',
-    Pending = 'pending'
-}
-
-
-
diff --git a/types/upload-for-owner.ts b/types/upload-for-owner.ts
deleted file mode 100644
index af8bf7efbd7509988a476c857c3162fac66a0b59..0000000000000000000000000000000000000000
--- a/types/upload-for-owner.ts
+++ /dev/null
@@ -1,134 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Track } from './track';
-import { UploadForOwnerImportStatusEnum } from './upload-for-owner-import-status-enum';
-
-/**
- * 
- * @export
- * @interface UploadForOwner
- */
-export interface UploadForOwner {
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    filename: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    creation_date: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    mimetype: string | null;
-    /**
-     * 
-     * @type {Track}
-     * @memberof UploadForOwner
-     */
-    track?: Track | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    library?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    channel?: string;
-    /**
-     * 
-     * @type {number}
-     * @memberof UploadForOwner
-     */
-    duration: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof UploadForOwner
-     */
-    bitrate: number | null;
-    /**
-     * 
-     * @type {number}
-     * @memberof UploadForOwner
-     */
-    size: number | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    import_date: string | null;
-    /**
-     * 
-     * @type {UploadForOwnerImportStatusEnum}
-     * @memberof UploadForOwner
-     */
-    import_status?: UploadForOwnerImportStatusEnum;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof UploadForOwner
-     */
-    import_details: { [key: string]: any; };
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof UploadForOwner
-     */
-    import_metadata?: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    import_reference?: string;
-    /**
-     * 
-     * @type {{ [key: string]: any; }}
-     * @memberof UploadForOwner
-     */
-    metadata: { [key: string]: any; };
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    source?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof UploadForOwner
-     */
-    audio_file: string;
-}
-
-
diff --git a/types/usage.ts b/types/usage.ts
deleted file mode 100644
index eaaae2da7b9732f1cf6fb18f2189036e89c32122..0000000000000000000000000000000000000000
--- a/types/usage.ts
+++ /dev/null
@@ -1,31 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { UsersUsage } from './users-usage';
-
-/**
- * 
- * @export
- * @interface Usage
- */
-export interface Usage {
-    /**
-     * 
-     * @type {UsersUsage}
-     * @memberof Usage
-     */
-    users: UsersUsage;
-}
-
-
diff --git a/types/user-basic.ts b/types/user-basic.ts
deleted file mode 100644
index 27afafe5f4fbdcc8d46f710a54118ef99e483d1c..0000000000000000000000000000000000000000
--- a/types/user-basic.ts
+++ /dev/null
@@ -1,55 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Attachment } from './attachment';
-
-/**
- * 
- * @export
- * @interface UserBasic
- */
-export interface UserBasic {
-    /**
-     * 
-     * @type {number}
-     * @memberof UserBasic
-     */
-    id: number;
-    /**
-     * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
-     * @type {string}
-     * @memberof UserBasic
-     */
-    username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserBasic
-     */
-    name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserBasic
-     */
-    date_joined?: string;
-    /**
-     * 
-     * @type {Attachment}
-     * @memberof UserBasic
-     */
-    avatar: Attachment;
-}
-
-
diff --git a/types/user-details.ts b/types/user-details.ts
deleted file mode 100644
index 2e95512823d028ba2fdf0ad16f8bb630a6f72fe2..0000000000000000000000000000000000000000
--- a/types/user-details.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * User model w/o password
- * @export
- * @interface UserDetails
- */
-export interface UserDetails {
-    /**
-     * 
-     * @type {number}
-     * @memberof UserDetails
-     */
-    pk: number;
-    /**
-     * Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.
-     * @type {string}
-     * @memberof UserDetails
-     */
-    username: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserDetails
-     */
-    email: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserDetails
-     */
-    first_name?: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserDetails
-     */
-    last_name?: string;
-}
-
-
diff --git a/types/user-filter.ts b/types/user-filter.ts
deleted file mode 100644
index 6f648a2449401516ea533517e2b6b58b1f595d2e..0000000000000000000000000000000000000000
--- a/types/user-filter.ts
+++ /dev/null
@@ -1,43 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { ModerationTarget } from './moderation-target';
-
-/**
- * 
- * @export
- * @interface UserFilter
- */
-export interface UserFilter {
-    /**
-     * 
-     * @type {string}
-     * @memberof UserFilter
-     */
-    uuid: string;
-    /**
-     * 
-     * @type {ModerationTarget}
-     * @memberof UserFilter
-     */
-    target: ModerationTarget;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserFilter
-     */
-    creation_date: string;
-}
-
-
diff --git a/types/user-track-favorite-write.ts b/types/user-track-favorite-write.ts
deleted file mode 100644
index b1e0e158fc21b42975efce21a90df8aacc96a1e7..0000000000000000000000000000000000000000
--- a/types/user-track-favorite-write.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface UserTrackFavoriteWrite
- */
-export interface UserTrackFavoriteWrite {
-    /**
-     * 
-     * @type {number}
-     * @memberof UserTrackFavoriteWrite
-     */
-    id: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof UserTrackFavoriteWrite
-     */
-    track: number;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserTrackFavoriteWrite
-     */
-    creation_date?: string;
-}
-
-
diff --git a/types/user-track-favorite.ts b/types/user-track-favorite.ts
deleted file mode 100644
index bb0e844f5528b32febd279b97c5314440890c586..0000000000000000000000000000000000000000
--- a/types/user-track-favorite.ts
+++ /dev/null
@@ -1,57 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { APIActor } from './apiactor';
-import { Track } from './track';
-import { UserBasic } from './user-basic';
-
-/**
- * 
- * @export
- * @interface UserTrackFavorite
- */
-export interface UserTrackFavorite {
-    /**
-     * 
-     * @type {number}
-     * @memberof UserTrackFavorite
-     */
-    id: number;
-    /**
-     * 
-     * @type {UserBasic}
-     * @memberof UserTrackFavorite
-     */
-    user: UserBasic;
-    /**
-     * 
-     * @type {Track}
-     * @memberof UserTrackFavorite
-     */
-    track: Track;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserTrackFavorite
-     */
-    creation_date?: string;
-    /**
-     * 
-     * @type {APIActor}
-     * @memberof UserTrackFavorite
-     */
-    actor: APIActor;
-}
-
-
diff --git a/types/user-write.ts b/types/user-write.ts
deleted file mode 100644
index 5b5e870e9f1424323f7ef1f95dc7916920e1140e..0000000000000000000000000000000000000000
--- a/types/user-write.ts
+++ /dev/null
@@ -1,62 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-import { Content } from './content';
-import { PrivacyLevelEnum } from './privacy-level-enum';
-
-/**
- * 
- * @export
- * @interface UserWrite
- */
-export interface UserWrite {
-    /**
-     * 
-     * @type {string}
-     * @memberof UserWrite
-     */
-    name?: string;
-    /**
-     * 
-     * @type {PrivacyLevelEnum}
-     * @memberof UserWrite
-     */
-    privacy_level?: PrivacyLevelEnum;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserWrite
-     */
-    avatar: string;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserWrite
-     */
-    instance_support_message_display_date?: string | null;
-    /**
-     * 
-     * @type {string}
-     * @memberof UserWrite
-     */
-    funkwhale_support_message_display_date?: string | null;
-    /**
-     * 
-     * @type {Content}
-     * @memberof UserWrite
-     */
-    summary?: Content | null;
-}
-
-
diff --git a/types/users-usage.ts b/types/users-usage.ts
deleted file mode 100644
index 03a364ad1e305706b9d08a1ed9d73aff5da5dff3..0000000000000000000000000000000000000000
--- a/types/users-usage.ts
+++ /dev/null
@@ -1,42 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface UsersUsage
- */
-export interface UsersUsage {
-    /**
-     * 
-     * @type {number}
-     * @memberof UsersUsage
-     */
-    total: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof UsersUsage
-     */
-    activeHalfyear: number;
-    /**
-     * 
-     * @type {number}
-     * @memberof UsersUsage
-     */
-    activeMonth: number;
-}
-
-
diff --git a/types/verify-email.ts b/types/verify-email.ts
deleted file mode 100644
index 2066b036dc143ccecda0ca9450fc8f0c53c91c76..0000000000000000000000000000000000000000
--- a/types/verify-email.ts
+++ /dev/null
@@ -1,30 +0,0 @@
-// tslint:disable
-/**
- * Funkwhale API
- * Interactive documentation for [Funkwhale](https://funkwhale.audio) API.  Backward compatibility between minor versions (1.X to 1.Y) is guaranteed for all the endpoints documented here.  Usage -----  Click on an endpoint name to inspect its properties, parameters and responses.  Use the \"Try it out\" button to send a real world payload to the endpoint and inspect the corresponding response.  OAuth Authentication --------------------  You can register your own OAuth app using the `/api/v1/oauth/apps/` endpoint. Proceed to the standard OAuth flow afterwards:  - Our authorize URL is at `/authorize` - Our token acquisition and refresh URL is at `/api/v1/oauth/token` - The list of supported scopes is available by clicking the `Authorize` button in the Swagger UI documentation - Use `urn:ietf:wg:oauth:2.0:oob` as your redirect URI if you want the user to get a copy-pastable authorization code - At the moment, endpoints that deal with admin or moderator-level content are not accessible via OAuth, only through the Web UI  You can use our demo server at `https://demo.funkwhale.audio` for testing purposes.  Application token authentication --------------------------------  If using OAuth isn\'t practical and you have an account on the Funkwhale pod, you can create an application by visiting `/settings`.  Once the application is created, you can authenticate using its access token in the `Authorization` header, like this: `Authorization: Bearer <token>`.   Rate limiting -------------  Depending on server configuration, pods running Funkwhale 0.20 and higher may rate-limit incoming requests to prevent abuse and improve the stability of service. Requests that are dropped because of rate-limiting receive a 429 HTTP response.  The limits themselves vary depending on:  - The client: anonymous requests are subject to lower limits than authenticated requests - The operation being performed: Write and delete operations, as performed with DELETE, POST, PUT and PATCH HTTP methods are subject to lower limits  Those conditions are used to determine the scope of the request, which in turns determine the limit that is applied. For instance, authenticated POST requests are bound to the `authenticated-create` scope, with a default limit of 1000 requests/hour, but anonymous POST requests are bound to the `anonymous-create` scope, with a lower limit of 1000 requests/day.  A full list of scopes with their corresponding description, and the current usage data for the client performing the request is available via the `/api/v1/rate-limit` endpoint.  Additionally, we include HTTP headers on all API response to ensure API clients can understand:  - what scope was bound to a given request - what is the corresponding limit - how much similar requests can be sent before being limited - and how much time they should wait if they have been limited  <table> <caption>Rate limiting headers</caption> <thead> <th>Header</th> <th>Example value</th> <th>Description value</th> </thead> <tbody> <tr> <td><code>X-RateLimit-Limit</code></td> <td>50</td> <td>The number of allowed requests whithin a given period</td> </tr> <tr> <td><code>X-RateLimit-Duration</code></td> <td>3600</td> <td>The time window, in seconds, during which those requests are accounted for.</td> </tr> <tr> <td><code>X-RateLimit-Scope</code></td> <td>login</td> <td>The name of the scope as computed for the request</td> </tr> <tr> <td><code>X-RateLimit-Remaining</code></td> <td>42</td> <td>How many requests can be sent with the same scope before the limit applies</td> </tr> <tr> <td><code>Retry-After</code> (if <code>X-RateLimit-Remaining</code> is 0)</td> <td>3543</td> <td>How many seconds to wait before a retry</td> </tr> <tr> <td><code>X-RateLimit-Reset</code></td> <td>1568126089</td> <td>A timestamp indicating when <code>X-RateLimit-Remaining</code> will return to its higher possible value</td> </tr> <tr> <td><code>X-RateLimit-ResetSeconds</code></td> <td>3599</td> <td>How many seconds to wait before <code>X-RateLimit-Remaining</code> returns to its higher possible value</td> </tr> </tbody> </table>   Resources ---------  For more targeted guides regarding API usage, and especially authentication, please refer to [https://docs.funkwhale.audio/api.html](https://docs.funkwhale.audio/api.html) 
- *
- * The version of the OpenAPI document: 1.2.8
- * 
- *
- * NOTE: This class is auto generated by OpenAPI Generator (https://openapi-generator.tech).
- * https://openapi-generator.tech
- * Do not edit the class manually.
- */
-
-
-
-/**
- * 
- * @export
- * @interface VerifyEmail
- */
-export interface VerifyEmail {
-    /**
-     * 
-     * @type {string}
-     * @memberof VerifyEmail
-     */
-    key: string;
-}
-
-
diff --git a/vite.config.ts b/vite.config.ts
new file mode 100644
index 0000000000000000000000000000000000000000..767f1b1fc09dcc6bc89b3bdb0324887b0776ad54
--- /dev/null
+++ b/vite.config.ts
@@ -0,0 +1,20 @@
+import { defineConfig } from 'vite'
+
+export default defineConfig(() => ({
+  build: {
+    lib: {
+      entry: './src/index.ts',
+      name: '@funkwhale/api'
+    },
+    rollupOptions: {
+		  external: ['vue', 'vuex'],
+		  output: {
+        exports: 'named',
+        globals: {
+          vue: 'Vue'
+        }
+		  }
+		}
+  },
+  publicDir: false
+}))
diff --git a/yarn.lock b/yarn.lock
new file mode 100644
index 0000000000000000000000000000000000000000..3dca1c089d0fcf01a4b2d5c3cadfc515d8dd6582
--- /dev/null
+++ b/yarn.lock
@@ -0,0 +1,789 @@
+# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
+# yarn lockfile v1
+
+
+"@apidevtools/json-schema-ref-parser@9.0.6":
+  version "9.0.6"
+  resolved "https://registry.yarnpkg.com/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.6.tgz#5d9000a3ac1fd25404da886da6b266adcd99cf1c"
+  integrity sha512-M3YgsLjI0lZxvrpeGVk9Ap032W6TPQkH6pRAZz81Ac3WUNF79VQooAFnp8umjvVzUmD93NkogxEwbSce7qMsUg==
+  dependencies:
+    "@jsdevtools/ono" "^7.1.3"
+    call-me-maybe "^1.0.1"
+    js-yaml "^3.13.1"
+
+"@apidevtools/openapi-schemas@^2.1.0":
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz#9fa08017fb59d80538812f03fc7cac5992caaa17"
+  integrity sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==
+
+"@apidevtools/swagger-methods@^3.0.2":
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz#b789a362e055b0340d04712eafe7027ddc1ac267"
+  integrity sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==
+
+"@apidevtools/swagger-parser@^10.0.1":
+  version "10.1.0"
+  resolved "https://registry.yarnpkg.com/@apidevtools/swagger-parser/-/swagger-parser-10.1.0.tgz#a987d71e5be61feb623203be0c96e5985b192ab6"
+  integrity sha512-9Kt7EuS/7WbMAUv2gSziqjvxwDbFSg3Xeyfuj5laUODX8o/k/CpsAKiQ8W7/R88eXFTMbJYg6+7uAmOWNKmwnw==
+  dependencies:
+    "@apidevtools/json-schema-ref-parser" "9.0.6"
+    "@apidevtools/openapi-schemas" "^2.1.0"
+    "@apidevtools/swagger-methods" "^3.0.2"
+    "@jsdevtools/ono" "^7.1.3"
+    ajv "^8.6.3"
+    ajv-draft-04 "^1.0.0"
+    call-me-maybe "^1.0.1"
+
+"@babel/parser@^7.16.4":
+  version "7.19.1"
+  resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.19.1.tgz#6f6d6c2e621aad19a92544cc217ed13f1aac5b4c"
+  integrity sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==
+
+"@esbuild/android-arm@0.15.9":
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.15.9.tgz#7e1221604ab88ed5021ead74fa8cca4405e1e431"
+  integrity sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==
+
+"@esbuild/linux-loong64@0.15.9":
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.15.9.tgz#b658a97babf1f40783354af7039b84c3fdfc3fc3"
+  integrity sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==
+
+"@exodus/schemasafe@^1.0.0-rc.2":
+  version "1.0.0-rc.7"
+  resolved "https://registry.yarnpkg.com/@exodus/schemasafe/-/schemasafe-1.0.0-rc.7.tgz#aded6839c2369883dafa46608a135c82b42ed76b"
+  integrity sha512-+1mBLsa+vvlV0lwEAP1hwgmOPkjMnoJ8hyCMfCCJga0sVDwDzrPJjnxZwdDaUmOh/vbFHQGBTk+FxsVjoI/CjQ==
+
+"@jsdevtools/ono@^7.1.3":
+  version "7.1.3"
+  resolved "https://registry.yarnpkg.com/@jsdevtools/ono/-/ono-7.1.3.tgz#9df03bbd7c696a5c58885c34aa06da41c8543796"
+  integrity sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==
+
+"@vue/compiler-core@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-core/-/compiler-core-3.2.39.tgz#0d77e635f4bdb918326669155a2dc977c053943e"
+  integrity sha512-mf/36OWXqWn0wsC40nwRRGheR/qoID+lZXbIuLnr4/AngM0ov8Xvv8GHunC0rKRIkh60bTqydlqTeBo49rlbqw==
+  dependencies:
+    "@babel/parser" "^7.16.4"
+    "@vue/shared" "3.2.39"
+    estree-walker "^2.0.2"
+    source-map "^0.6.1"
+
+"@vue/compiler-dom@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-dom/-/compiler-dom-3.2.39.tgz#bd69d35c1a48fe2cea4ab9e96d2a3a735d146fdf"
+  integrity sha512-HMFI25Be1C8vLEEv1hgEO1dWwG9QQ8LTTPmCkblVJY/O3OvWx6r1+zsox5mKPMGvqYEZa6l8j+xgOfUspgo7hw==
+  dependencies:
+    "@vue/compiler-core" "3.2.39"
+    "@vue/shared" "3.2.39"
+
+"@vue/compiler-sfc@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-sfc/-/compiler-sfc-3.2.39.tgz#8fe29990f672805b7c5a2ecfa5b05e681c862ea2"
+  integrity sha512-fqAQgFs1/BxTUZkd0Vakn3teKUt//J3c420BgnYgEOoVdTwYpBTSXCMJ88GOBCylmUBbtquGPli9tVs7LzsWIA==
+  dependencies:
+    "@babel/parser" "^7.16.4"
+    "@vue/compiler-core" "3.2.39"
+    "@vue/compiler-dom" "3.2.39"
+    "@vue/compiler-ssr" "3.2.39"
+    "@vue/reactivity-transform" "3.2.39"
+    "@vue/shared" "3.2.39"
+    estree-walker "^2.0.2"
+    magic-string "^0.25.7"
+    postcss "^8.1.10"
+    source-map "^0.6.1"
+
+"@vue/compiler-ssr@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/compiler-ssr/-/compiler-ssr-3.2.39.tgz#4f3bfb535cb98b764bee45e078700e03ccc60633"
+  integrity sha512-EoGCJ6lincKOZGW+0Ky4WOKsSmqL7hp1ZYgen8M7u/mlvvEQUaO9tKKOy7K43M9U2aA3tPv0TuYYQFrEbK2eFQ==
+  dependencies:
+    "@vue/compiler-dom" "3.2.39"
+    "@vue/shared" "3.2.39"
+
+"@vue/devtools-api@^6.0.0-beta.11":
+  version "6.2.1"
+  resolved "https://registry.yarnpkg.com/@vue/devtools-api/-/devtools-api-6.2.1.tgz#6f2948ff002ec46df01420dfeff91de16c5b4092"
+  integrity sha512-OEgAMeQXvCoJ+1x8WyQuVZzFo0wcyCmUR3baRVLmKBo1LmYZWMlRiXlux5jd0fqVJu6PfDbOrZItVqUEzLobeQ==
+
+"@vue/reactivity-transform@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/reactivity-transform/-/reactivity-transform-3.2.39.tgz#da6ae6c8fd77791b9ae21976720d116591e1c4aa"
+  integrity sha512-HGuWu864zStiWs9wBC6JYOP1E00UjMdDWIG5W+FpUx28hV3uz9ODOKVNm/vdOy/Pvzg8+OcANxAVC85WFBbl3A==
+  dependencies:
+    "@babel/parser" "^7.16.4"
+    "@vue/compiler-core" "3.2.39"
+    "@vue/shared" "3.2.39"
+    estree-walker "^2.0.2"
+    magic-string "^0.25.7"
+
+"@vue/reactivity@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/reactivity/-/reactivity-3.2.39.tgz#e6e3615fe2288d4232b104640ddabd0729a78c80"
+  integrity sha512-vlaYX2a3qMhIZfrw3Mtfd+BuU+TZmvDrPMa+6lpfzS9k/LnGxkSuf0fhkP0rMGfiOHPtyKoU9OJJJFGm92beVQ==
+  dependencies:
+    "@vue/shared" "3.2.39"
+
+"@vue/runtime-core@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/runtime-core/-/runtime-core-3.2.39.tgz#dc1faccab11b3e81197aba33fb30c9447c1d2c84"
+  integrity sha512-xKH5XP57JW5JW+8ZG1khBbuLakINTgPuINKL01hStWLTTGFOrM49UfCFXBcFvWmSbci3gmJyLl2EAzCaZWsx8g==
+  dependencies:
+    "@vue/reactivity" "3.2.39"
+    "@vue/shared" "3.2.39"
+
+"@vue/runtime-dom@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/runtime-dom/-/runtime-dom-3.2.39.tgz#4a8cb132bcef316e8151c5ed07fc7272eb064614"
+  integrity sha512-4G9AEJP+sLhsqf5wXcyKVWQKUhI+iWfy0hWQgea+CpaTD7BR0KdQzvoQdZhwCY6B3oleSyNLkLAQwm0ya/wNoA==
+  dependencies:
+    "@vue/runtime-core" "3.2.39"
+    "@vue/shared" "3.2.39"
+    csstype "^2.6.8"
+
+"@vue/server-renderer@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/server-renderer/-/server-renderer-3.2.39.tgz#4358292d925233b0d8b54cf0513eaece8b2351c5"
+  integrity sha512-1yn9u2YBQWIgytFMjz4f/t0j43awKytTGVptfd3FtBk76t1pd8mxbek0G/DrnjJhd2V7mSTb5qgnxMYt8Z5iSQ==
+  dependencies:
+    "@vue/compiler-ssr" "3.2.39"
+    "@vue/shared" "3.2.39"
+
+"@vue/shared@3.2.39":
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/@vue/shared/-/shared-3.2.39.tgz#302df167559a1a5156da162d8cc6760cef67f8e3"
+  integrity sha512-D3dl2ZB9qE6mTuWPk9RlhDeP1dgNRUKC3NJxji74A4yL8M2MwlhLKUC/49WHjrNzSPug58fWx/yFbaTzGAQSBw==
+
+ajv-draft-04@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/ajv-draft-04/-/ajv-draft-04-1.0.0.tgz#3b64761b268ba0b9e668f0b41ba53fce0ad77fc8"
+  integrity sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==
+
+ajv@^8.6.3:
+  version "8.11.0"
+  resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.11.0.tgz#977e91dd96ca669f54a11e23e378e33b884a565f"
+  integrity sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==
+  dependencies:
+    fast-deep-equal "^3.1.1"
+    json-schema-traverse "^1.0.0"
+    require-from-string "^2.0.2"
+    uri-js "^4.2.2"
+
+ansi-regex@^5.0.1:
+  version "5.0.1"
+  resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
+  integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
+
+ansi-styles@^4.0.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
+  integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
+  dependencies:
+    color-convert "^2.0.1"
+
+argparse@^1.0.7:
+  version "1.0.10"
+  resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
+  integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
+  dependencies:
+    sprintf-js "~1.0.2"
+
+call-me-maybe@^1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b"
+  integrity sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==
+
+cliui@^7.0.2:
+  version "7.0.4"
+  resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f"
+  integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==
+  dependencies:
+    string-width "^4.2.0"
+    strip-ansi "^6.0.0"
+    wrap-ansi "^7.0.0"
+
+color-convert@^2.0.1:
+  version "2.0.1"
+  resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
+  integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
+  dependencies:
+    color-name "~1.1.4"
+
+color-name@~1.1.4:
+  version "1.1.4"
+  resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
+  integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
+
+csstype@^2.6.8:
+  version "2.6.21"
+  resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.21.tgz#2efb85b7cc55c80017c66a5ad7cbd931fda3a90e"
+  integrity sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==
+
+emoji-regex@^8.0.0:
+  version "8.0.0"
+  resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
+  integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
+
+es6-promise@^3.2.1:
+  version "3.3.1"
+  resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613"
+  integrity sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==
+
+esbuild-android-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.15.9.tgz#4a7eb320ca8d3a305f14792061fd9614ccebb7c0"
+  integrity sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==
+
+esbuild-android-arm64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.15.9.tgz#c948e5686df20857ad361ec67e070d40d7cab985"
+  integrity sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==
+
+esbuild-darwin-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.15.9.tgz#25f564fa4b39c1cec84dc46bce5634fdbce1d5e4"
+  integrity sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==
+
+esbuild-darwin-arm64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.9.tgz#60faea3ed95d15239536aa88d06bb82b29278a86"
+  integrity sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==
+
+esbuild-freebsd-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.9.tgz#0339ef1c90a919175e7816788224517896657a0e"
+  integrity sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==
+
+esbuild-freebsd-arm64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.9.tgz#32abfc0be3ae3dd38e5a86a9beadbbcf592f1b57"
+  integrity sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==
+
+esbuild-linux-32@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.15.9.tgz#93581348a4da7ed2b29bc5539f2605ad7fcee77b"
+  integrity sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==
+
+esbuild-linux-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.15.9.tgz#0d171e7946c95d0d3ed4826026af2c5632d7dcc4"
+  integrity sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==
+
+esbuild-linux-arm64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.9.tgz#9838795a3720cbe736d3bc20621bd366eac22f24"
+  integrity sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==
+
+esbuild-linux-arm@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.15.9.tgz#dce96cd817bc7376f6af3967649c4ab1f2f79506"
+  integrity sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==
+
+esbuild-linux-mips64le@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.9.tgz#0335a0739e61aa97cb9b4a018e3facfcca9cdcfd"
+  integrity sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==
+
+esbuild-linux-ppc64le@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.9.tgz#18482afb95b8a705e2da0a59d7131bff221281f9"
+  integrity sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==
+
+esbuild-linux-riscv64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.9.tgz#03b6f9708272c117006b9ce1c9ae8aab91b5a5b6"
+  integrity sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==
+
+esbuild-linux-s390x@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.9.tgz#65fb645623d575780f155f0ee52935e62f9cca4f"
+  integrity sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==
+
+esbuild-netbsd-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.9.tgz#7894297bb9e11f3d2f6f31efecd1be4e181f0d54"
+  integrity sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==
+
+esbuild-openbsd-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.9.tgz#0f9d4c6b6772ae50d491d68ad4cc028300dda7c0"
+  integrity sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==
+
+esbuild-sunos-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.15.9.tgz#c32b7ce574b08f814de810ce7c1e34b843768126"
+  integrity sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==
+
+esbuild-windows-32@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.15.9.tgz#37a8f7cfccdb2177cd46613a1a1e1fcb419d36df"
+  integrity sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==
+
+esbuild-windows-64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.15.9.tgz#5fe1e76fc13dd7f520febecaea110b6f1649c7b2"
+  integrity sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==
+
+esbuild-windows-arm64@0.15.9:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.9.tgz#98504428f7ba7d2cfc11940be68ee1139173fdce"
+  integrity sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==
+
+esbuild@^0.15.6:
+  version "0.15.9"
+  resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.15.9.tgz#33fb18b67b85004b6f7616bec955ca4b3e58935d"
+  integrity sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==
+  optionalDependencies:
+    "@esbuild/android-arm" "0.15.9"
+    "@esbuild/linux-loong64" "0.15.9"
+    esbuild-android-64 "0.15.9"
+    esbuild-android-arm64 "0.15.9"
+    esbuild-darwin-64 "0.15.9"
+    esbuild-darwin-arm64 "0.15.9"
+    esbuild-freebsd-64 "0.15.9"
+    esbuild-freebsd-arm64 "0.15.9"
+    esbuild-linux-32 "0.15.9"
+    esbuild-linux-64 "0.15.9"
+    esbuild-linux-arm "0.15.9"
+    esbuild-linux-arm64 "0.15.9"
+    esbuild-linux-mips64le "0.15.9"
+    esbuild-linux-ppc64le "0.15.9"
+    esbuild-linux-riscv64 "0.15.9"
+    esbuild-linux-s390x "0.15.9"
+    esbuild-netbsd-64 "0.15.9"
+    esbuild-openbsd-64 "0.15.9"
+    esbuild-sunos-64 "0.15.9"
+    esbuild-windows-32 "0.15.9"
+    esbuild-windows-64 "0.15.9"
+    esbuild-windows-arm64 "0.15.9"
+
+escalade@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
+  integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
+
+esprima@^4.0.0:
+  version "4.0.1"
+  resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
+  integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
+
+estree-walker@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
+  integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
+
+fast-deep-equal@^3.1.1:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
+  integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
+
+fast-safe-stringify@^2.0.7:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884"
+  integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==
+
+fsevents@~2.3.2:
+  version "2.3.2"
+  resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a"
+  integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==
+
+function-bind@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
+  integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
+
+get-caller-file@^2.0.5:
+  version "2.0.5"
+  resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
+  integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
+
+has@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
+  integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
+  dependencies:
+    function-bind "^1.1.1"
+
+http2-client@^1.2.5:
+  version "1.3.5"
+  resolved "https://registry.yarnpkg.com/http2-client/-/http2-client-1.3.5.tgz#20c9dc909e3cc98284dd20af2432c524086df181"
+  integrity sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==
+
+is-core-module@^2.9.0:
+  version "2.10.0"
+  resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.10.0.tgz#9012ede0a91c69587e647514e1d5277019e728ed"
+  integrity sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==
+  dependencies:
+    has "^1.0.3"
+
+is-fullwidth-code-point@^3.0.0:
+  version "3.0.0"
+  resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
+  integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
+
+js-yaml@^3.13.1:
+  version "3.14.1"
+  resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
+  integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
+  dependencies:
+    argparse "^1.0.7"
+    esprima "^4.0.0"
+
+json-schema-traverse@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
+  integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
+
+lodash@^4.17.20:
+  version "4.17.21"
+  resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
+  integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
+
+magic-string@^0.25.7:
+  version "0.25.9"
+  resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c"
+  integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==
+  dependencies:
+    sourcemap-codec "^1.4.8"
+
+minimist@^1.2.5:
+  version "1.2.6"
+  resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
+  integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
+
+nanoid@^3.3.4:
+  version "3.3.4"
+  resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
+  integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+
+node-fetch-h2@^2.3.0:
+  version "2.3.0"
+  resolved "https://registry.yarnpkg.com/node-fetch-h2/-/node-fetch-h2-2.3.0.tgz#c6188325f9bd3d834020bf0f2d6dc17ced2241ac"
+  integrity sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==
+  dependencies:
+    http2-client "^1.2.5"
+
+node-fetch@^2.6.1:
+  version "2.6.7"
+  resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad"
+  integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==
+  dependencies:
+    whatwg-url "^5.0.0"
+
+node-readfiles@^0.2.0:
+  version "0.2.0"
+  resolved "https://registry.yarnpkg.com/node-readfiles/-/node-readfiles-0.2.0.tgz#dbbd4af12134e2e635c245ef93ffcf6f60673a5d"
+  integrity sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==
+  dependencies:
+    es6-promise "^3.2.1"
+
+oas-kit-common@^1.0.8:
+  version "1.0.8"
+  resolved "https://registry.yarnpkg.com/oas-kit-common/-/oas-kit-common-1.0.8.tgz#6d8cacf6e9097967a4c7ea8bcbcbd77018e1f535"
+  integrity sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==
+  dependencies:
+    fast-safe-stringify "^2.0.7"
+
+oas-linter@^3.2.2:
+  version "3.2.2"
+  resolved "https://registry.yarnpkg.com/oas-linter/-/oas-linter-3.2.2.tgz#ab6a33736313490659035ca6802dc4b35d48aa1e"
+  integrity sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==
+  dependencies:
+    "@exodus/schemasafe" "^1.0.0-rc.2"
+    should "^13.2.1"
+    yaml "^1.10.0"
+
+oas-resolver@^2.5.6:
+  version "2.5.6"
+  resolved "https://registry.yarnpkg.com/oas-resolver/-/oas-resolver-2.5.6.tgz#10430569cb7daca56115c915e611ebc5515c561b"
+  integrity sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==
+  dependencies:
+    node-fetch-h2 "^2.3.0"
+    oas-kit-common "^1.0.8"
+    reftools "^1.1.9"
+    yaml "^1.10.0"
+    yargs "^17.0.1"
+
+oas-schema-walker@^1.1.5:
+  version "1.1.5"
+  resolved "https://registry.yarnpkg.com/oas-schema-walker/-/oas-schema-walker-1.1.5.tgz#74c3cd47b70ff8e0b19adada14455b5d3ac38a22"
+  integrity sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==
+
+oas-validator@^5.0.8:
+  version "5.0.8"
+  resolved "https://registry.yarnpkg.com/oas-validator/-/oas-validator-5.0.8.tgz#387e90df7cafa2d3ffc83b5fb976052b87e73c28"
+  integrity sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==
+  dependencies:
+    call-me-maybe "^1.0.1"
+    oas-kit-common "^1.0.8"
+    oas-linter "^3.2.2"
+    oas-resolver "^2.5.6"
+    oas-schema-walker "^1.1.5"
+    reftools "^1.1.9"
+    should "^13.2.1"
+    yaml "^1.10.0"
+
+oazapfts@^4.1.0:
+  version "4.1.0"
+  resolved "https://registry.yarnpkg.com/oazapfts/-/oazapfts-4.1.0.tgz#f2db70e90d7a431f895dee4b3e9db0ba10707a74"
+  integrity sha512-Y2G0qPon3QOVqKw5gMbc24AC5lrifEuXP2WRSHnW+3hVxxmsZg1Wvytyr3YYRHRfpdBC7ASupg/Dxici/X8h+g==
+  dependencies:
+    "@apidevtools/swagger-parser" "^10.0.1"
+    lodash "^4.17.20"
+    minimist "^1.2.5"
+    swagger2openapi "^7.0.7"
+    typescript "^4.1.2"
+
+path-parse@^1.0.7:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
+  integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
+
+picocolors@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c"
+  integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==
+
+postcss@^8.1.10, postcss@^8.4.16:
+  version "8.4.16"
+  resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.16.tgz#33a1d675fac39941f5f445db0de4db2b6e01d43c"
+  integrity sha512-ipHE1XBvKzm5xI7hiHCZJCSugxvsdq2mPnsq5+UF+VHCjiBvtDrlxJfMBToWaP9D5XlgNmcFGqoHmUn0EYEaRQ==
+  dependencies:
+    nanoid "^3.3.4"
+    picocolors "^1.0.0"
+    source-map-js "^1.0.2"
+
+punycode@^2.1.0:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
+  integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
+
+reftools@^1.1.9:
+  version "1.1.9"
+  resolved "https://registry.yarnpkg.com/reftools/-/reftools-1.1.9.tgz#e16e19f662ccd4648605312c06d34e5da3a2b77e"
+  integrity sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==
+
+require-directory@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
+  integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
+
+require-from-string@^2.0.2:
+  version "2.0.2"
+  resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
+  integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
+
+resolve@^1.22.1:
+  version "1.22.1"
+  resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177"
+  integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==
+  dependencies:
+    is-core-module "^2.9.0"
+    path-parse "^1.0.7"
+    supports-preserve-symlinks-flag "^1.0.0"
+
+rollup@~2.78.0:
+  version "2.78.1"
+  resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.78.1.tgz#52fe3934d9c83cb4f7c4cb5fb75d88591be8648f"
+  integrity sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+should-equal@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/should-equal/-/should-equal-2.0.0.tgz#6072cf83047360867e68e98b09d71143d04ee0c3"
+  integrity sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==
+  dependencies:
+    should-type "^1.4.0"
+
+should-format@^3.0.3:
+  version "3.0.3"
+  resolved "https://registry.yarnpkg.com/should-format/-/should-format-3.0.3.tgz#9bfc8f74fa39205c53d38c34d717303e277124f1"
+  integrity sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==
+  dependencies:
+    should-type "^1.3.0"
+    should-type-adaptors "^1.0.1"
+
+should-type-adaptors@^1.0.1:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/should-type-adaptors/-/should-type-adaptors-1.1.0.tgz#401e7f33b5533033944d5cd8bf2b65027792e27a"
+  integrity sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==
+  dependencies:
+    should-type "^1.3.0"
+    should-util "^1.0.0"
+
+should-type@^1.3.0, should-type@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/should-type/-/should-type-1.4.0.tgz#0756d8ce846dfd09843a6947719dfa0d4cff5cf3"
+  integrity sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==
+
+should-util@^1.0.0:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/should-util/-/should-util-1.0.1.tgz#fb0d71338f532a3a149213639e2d32cbea8bcb28"
+  integrity sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==
+
+should@^13.2.1:
+  version "13.2.3"
+  resolved "https://registry.yarnpkg.com/should/-/should-13.2.3.tgz#96d8e5acf3e97b49d89b51feaa5ae8d07ef58f10"
+  integrity sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==
+  dependencies:
+    should-equal "^2.0.0"
+    should-format "^3.0.3"
+    should-type "^1.4.0"
+    should-type-adaptors "^1.0.1"
+    should-util "^1.0.0"
+
+source-map-js@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
+  integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+
+source-map@^0.6.1:
+  version "0.6.1"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
+  integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
+
+sourcemap-codec@^1.4.8:
+  version "1.4.8"
+  resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4"
+  integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==
+
+sprintf-js@~1.0.2:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+  integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
+
+string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
+  version "4.2.3"
+  resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
+  integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
+  dependencies:
+    emoji-regex "^8.0.0"
+    is-fullwidth-code-point "^3.0.0"
+    strip-ansi "^6.0.1"
+
+strip-ansi@^6.0.0, strip-ansi@^6.0.1:
+  version "6.0.1"
+  resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
+  integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
+  dependencies:
+    ansi-regex "^5.0.1"
+
+supports-preserve-symlinks-flag@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
+  integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
+
+swagger2openapi@^7.0.7:
+  version "7.0.8"
+  resolved "https://registry.yarnpkg.com/swagger2openapi/-/swagger2openapi-7.0.8.tgz#12c88d5de776cb1cbba758994930f40ad0afac59"
+  integrity sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==
+  dependencies:
+    call-me-maybe "^1.0.1"
+    node-fetch "^2.6.1"
+    node-fetch-h2 "^2.3.0"
+    node-readfiles "^0.2.0"
+    oas-kit-common "^1.0.8"
+    oas-resolver "^2.5.6"
+    oas-schema-walker "^1.1.5"
+    oas-validator "^5.0.8"
+    reftools "^1.1.9"
+    yaml "^1.10.0"
+    yargs "^17.0.1"
+
+tr46@~0.0.3:
+  version "0.0.3"
+  resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
+  integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
+
+typescript@^4.1.2, typescript@^4.6.4:
+  version "4.8.3"
+  resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.8.3.tgz#d59344522c4bc464a65a730ac695007fdb66dd88"
+  integrity sha512-goMHfm00nWPa8UvR/CPSvykqf6dVV8x/dp0c5mFTMTIu0u0FlGWRioyy7Nn0PGAdHxpJZnuO/ut+PpQ8UiHAig==
+
+uri-js@^4.2.2:
+  version "4.4.1"
+  resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
+  integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
+  dependencies:
+    punycode "^2.1.0"
+
+vite@^3.1.0:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/vite/-/vite-3.1.3.tgz#b2a0821c11aae124bb7618f8036913c689afcc59"
+  integrity sha512-/3XWiktaopByM5bd8dqvHxRt5EEgRikevnnrpND0gRfNkrMrPaGGexhtLCzv15RcCMtV2CLw+BPas8YFeSG0KA==
+  dependencies:
+    esbuild "^0.15.6"
+    postcss "^8.4.16"
+    resolve "^1.22.1"
+    rollup "~2.78.0"
+  optionalDependencies:
+    fsevents "~2.3.2"
+
+vue@^3.2.39:
+  version "3.2.39"
+  resolved "https://registry.yarnpkg.com/vue/-/vue-3.2.39.tgz#de071c56c4c32c41cbd54e55f11404295c0dd62d"
+  integrity sha512-tRkguhRTw9NmIPXhzk21YFBqXHT2t+6C6wPOgQ50fcFVWnPdetmRqbmySRHznrYjX2E47u0cGlKGcxKZJ38R/g==
+  dependencies:
+    "@vue/compiler-dom" "3.2.39"
+    "@vue/compiler-sfc" "3.2.39"
+    "@vue/runtime-dom" "3.2.39"
+    "@vue/server-renderer" "3.2.39"
+    "@vue/shared" "3.2.39"
+
+vuex@^4.0.2:
+  version "4.0.2"
+  resolved "https://registry.yarnpkg.com/vuex/-/vuex-4.0.2.tgz#f896dbd5bf2a0e963f00c67e9b610de749ccacc9"
+  integrity sha512-M6r8uxELjZIK8kTKDGgZTYX/ahzblnzC4isU1tpmEuOIIKmV+TRdc+H4s8ds2NuZ7wpUTdGRzJRtoj+lI+pc0Q==
+  dependencies:
+    "@vue/devtools-api" "^6.0.0-beta.11"
+
+webidl-conversions@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
+  integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
+
+whatwg-url@^5.0.0:
+  version "5.0.0"
+  resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
+  integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
+  dependencies:
+    tr46 "~0.0.3"
+    webidl-conversions "^3.0.0"
+
+wrap-ansi@^7.0.0:
+  version "7.0.0"
+  resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
+  integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
+  dependencies:
+    ansi-styles "^4.0.0"
+    string-width "^4.1.0"
+    strip-ansi "^6.0.0"
+
+y18n@^5.0.5:
+  version "5.0.8"
+  resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
+  integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
+
+yaml@^1.10.0:
+  version "1.10.2"
+  resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b"
+  integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==
+
+yargs-parser@^21.0.0:
+  version "21.1.1"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
+  integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
+
+yargs@^17.0.1:
+  version "17.5.1"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.5.1.tgz#e109900cab6fcb7fd44b1d8249166feb0b36e58e"
+  integrity sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==
+  dependencies:
+    cliui "^7.0.2"
+    escalade "^3.1.1"
+    get-caller-file "^2.0.5"
+    require-directory "^2.1.1"
+    string-width "^4.2.3"
+    y18n "^5.0.5"
+    yargs-parser "^21.0.0"