From 68face201b67742bbe0b6995fd17ed72259a7f49 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 13:57:22 +0000 Subject: [PATCH] Rename operation ids --- api/config/schema.py | 7 + api/config/settings/local.py | 2 +- api/funkwhale_api/activity/views.py | 3 + api/funkwhale_api/audio/views.py | 9 + api/funkwhale_api/common/decorators.py | 12 +- api/funkwhale_api/common/views.py | 7 + api/funkwhale_api/favorites/views.py | 5 + api/funkwhale_api/federation/api_views.py | 12 + api/funkwhale_api/federation/decorators.py | 16 +- api/funkwhale_api/instance/views.py | 2 + api/funkwhale_api/manage/views.py | 9 + api/funkwhale_api/music/views.py | 26 +- api/funkwhale_api/playlists/views.py | 8 + api/funkwhale_api/radios/views.py | 5 + api/funkwhale_api/schema.py | 69 + api/funkwhale_api/users/oauth/views.py | 4 + api/funkwhale_api/users/views.py | 15 + api/operations.json | 594 + api/pyproject.toml | 1 + api/schema.yml | 13390 +++++++++++++++++++ 20 files changed, 14173 insertions(+), 23 deletions(-) create mode 100644 api/funkwhale_api/schema.py create mode 100644 api/operations.json create mode 100644 api/schema.yml diff --git a/api/config/schema.py b/api/config/schema.py index 556536909..b1e5ab632 100644 --- a/api/config/schema.py +++ b/api/config/schema.py @@ -42,11 +42,18 @@ class CustomApplicationTokenExt(OpenApiAuthenticationExtension): def custom_preprocessing_hook(endpoints): filtered = [] + # your modifications to the list of operations that are exposed in the schema api_type = os.environ.get("API_TYPE", "v1") + for (path, path_regex, method, callback) in endpoints: if path.startswith("/api/v1/providers"): continue + + if path.startswith("/api/v1/users/users"): + continue + if path.startswith(f"/api/{api_type}"): filtered.append((path, path_regex, method, callback)) + return filtered diff --git a/api/config/settings/local.py b/api/config/settings/local.py index 3dacaf9ee..67e89691f 100644 --- a/api/config/settings/local.py +++ b/api/config/settings/local.py @@ -99,7 +99,7 @@ CELERY_TASK_ALWAYS_EAGER = False CSRF_TRUSTED_ORIGINS = [o for o in ALLOWED_HOSTS] -REST_FRAMEWORK["DEFAULT_SCHEMA_CLASS"] = "drf_spectacular.openapi.AutoSchema" +REST_FRAMEWORK["DEFAULT_SCHEMA_CLASS"] = "funkwhale_api.schema.CustomAutoSchema" SPECTACULAR_SETTINGS = { "TITLE": "Funkwhale API", "DESCRIPTION": open("Readme.md", "r").read(), diff --git a/api/funkwhale_api/activity/views.py b/api/funkwhale_api/activity/views.py index 701dd04b8..d75a94cb9 100644 --- a/api/funkwhale_api/activity/views.py +++ b/api/funkwhale_api/activity/views.py @@ -1,6 +1,8 @@ from rest_framework import viewsets from rest_framework.response import Response +from drf_spectacular.utils import extend_schema + from funkwhale_api.common.permissions import ConditionalAuthentication from funkwhale_api.favorites.models import TrackFavorite @@ -13,6 +15,7 @@ class ActivityViewSet(viewsets.GenericViewSet): permission_classes = [ConditionalAuthentication] queryset = TrackFavorite.objects.none() + @extend_schema(operation_id='get_activity') def list(self, request, *args, **kwargs): activity = utils.get_activity(user=request.user) serializer = self.serializer_class(activity, many=True) diff --git a/api/funkwhale_api/audio/views.py b/api/funkwhale_api/audio/views.py index 66a71fd39..83c34c648 100644 --- a/api/funkwhale_api/audio/views.py +++ b/api/funkwhale_api/audio/views.py @@ -5,6 +5,8 @@ from rest_framework import permissions as rest_permissions from rest_framework import response from rest_framework import viewsets +from drf_spectacular.utils import extend_schema, extend_schema_view + from django import http from django.db import transaction from django.db.models import Count, Prefetch, Q, Sum @@ -43,6 +45,12 @@ class ChannelsMixin(object): return super().dispatch(request, *args, **kwargs) +@extend_schema_view( + metedata_choices=extend_schema(operation_id='get_channel_metadata_choices'), + subscribe=extend_schema(operation_id='subscribe_channel'), + unsubscribe=extend_schema(operation_id='unsubscribe_channel'), + rss_subscribe=extend_schema(operation_id='subscribe_channel_rss'), +) class ChannelViewSet( ChannelsMixin, MultipleLookupDetailMixin, @@ -322,6 +330,7 @@ class SubscriptionsViewSet( qs = super().get_queryset() return qs.filter(actor=self.request.user.actor) + @extend_schema(operation_id='get_all_subscriptions') @decorators.action(methods=["get"], detail=False) def all(self, request, *args, **kwargs): """ diff --git a/api/funkwhale_api/common/decorators.py b/api/funkwhale_api/common/decorators.py index 49a2fb193..f30587a98 100644 --- a/api/funkwhale_api/common/decorators.py +++ b/api/funkwhale_api/common/decorators.py @@ -5,6 +5,8 @@ from rest_framework import exceptions from rest_framework import response from rest_framework import status +from drf_spectacular.utils import extend_schema + from . import filters from . import models from . import mutations as common_mutations @@ -87,6 +89,10 @@ def mutations_route(types): ) return response.Response(serializer.data, status=status.HTTP_201_CREATED) - return decorators.action( - methods=["get", "post"], detail=True, required_scope="edits" - )(mutations) + return extend_schema(methods=['post'], responses=serializers.APIMutationSerializer())( + extend_schema(methods=['get'], responses=serializers.APIMutationSerializer(many=True))( + decorators.action( + methods=["get", "post"], detail=True, required_scope="edits" + )(mutations) + ) + ) diff --git a/api/funkwhale_api/common/views.py b/api/funkwhale_api/common/views.py index d6cbf1953..f122b8b32 100644 --- a/api/funkwhale_api/common/views.py +++ b/api/funkwhale_api/common/views.py @@ -12,6 +12,8 @@ from rest_framework import response from rest_framework import views from rest_framework import viewsets +from drf_spectacular.utils import extend_schema + from config import plugins from funkwhale_api.users.oauth import permissions as oauth_permissions @@ -78,6 +80,7 @@ class MutationViewSet( return super().perform_destroy(instance) + @extend_schema(operation_id='approve_mutation') @action(detail=True, methods=["post"]) @transaction.atomic def approve(self, request, *args, **kwargs): @@ -107,6 +110,7 @@ class MutationViewSet( ) return response.Response({}, status=200) + @extend_schema(operation_id='reject_mutation') @action(detail=True, methods=["post"]) @transaction.atomic def reject(self, request, *args, **kwargs): @@ -201,6 +205,7 @@ class AttachmentViewSet( class TextPreviewView(views.APIView): permission_classes = [] + @extend_schema(operation_id='preview_text') def post(self, request, *args, **kwargs): payload = request.data if "text" not in payload: @@ -273,6 +278,7 @@ class PluginViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): user.plugins.filter(code=kwargs["pk"]).delete() return response.Response(status=204) + @extend_schema(operation_id='enable_plugin') @action(detail=True, methods=["post"]) def enable(self, request, *args, **kwargs): user = request.user @@ -281,6 +287,7 @@ class PluginViewSet(mixins.ListModelMixin, viewsets.GenericViewSet): plugins.enable_conf(kwargs["pk"], True, user) return response.Response({}, status=200) + @extend_schema(operation_id='disable_plugin') @action(detail=True, methods=["post"]) def disable(self, request, *args, **kwargs): user = request.user diff --git a/api/funkwhale_api/favorites/views.py b/api/funkwhale_api/favorites/views.py index db0c90900..5926ca52d 100644 --- a/api/funkwhale_api/favorites/views.py +++ b/api/funkwhale_api/favorites/views.py @@ -2,6 +2,8 @@ from rest_framework import mixins, status, viewsets from rest_framework.decorators import action from rest_framework.response import Response +from drf_spectacular.utils import extend_schema, extend_schema_view + from django.db.models import Prefetch from funkwhale_api.activity import record @@ -38,6 +40,7 @@ class TrackFavoriteViewSet( return serializers.UserTrackFavoriteSerializer return serializers.UserTrackFavoriteWriteSerializer + @extend_schema(operation_id='favorite_track') def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) @@ -67,6 +70,7 @@ class TrackFavoriteViewSet( favorite = models.TrackFavorite.add(track=track, user=self.request.user) return favorite + @extend_schema(operation_id='unfavorite_track') @action(methods=["delete", "post"], detail=False) def remove(self, request, *args, **kwargs): try: @@ -77,6 +81,7 @@ class TrackFavoriteViewSet( favorite.delete() return Response([], status=status.HTTP_204_NO_CONTENT) + @extend_schema(operation_id='get_all_favorite_tracks') @action(methods=["get"], detail=False) def all(self, request, *args, **kwargs): """ diff --git a/api/funkwhale_api/federation/api_views.py b/api/funkwhale_api/federation/api_views.py index f49c51c35..074941253 100644 --- a/api/funkwhale_api/federation/api_views.py +++ b/api/funkwhale_api/federation/api_views.py @@ -10,6 +10,8 @@ from rest_framework import permissions from rest_framework import response from rest_framework import viewsets +from drf_spectacular.utils import extend_schema, extend_schema_view + from funkwhale_api.common import preferences from funkwhale_api.common import utils as common_utils from funkwhale_api.common.permissions import ConditionalAuthentication @@ -38,6 +40,13 @@ def update_follow(follow, approved): routes.outbox.dispatch({"type": "Reject"}, context={"follow": follow}) +@extend_schema_view( + list=extend_schema(operation_id='get_federation_library_follows'), + create=extend_schema(operation_id='create_federation_library_follow'), +) +# NOTE: For some weird reason, @extend_schema_view doesn't work with `retrieve` and `destroy` methods. +@extend_schema(operation_id='get_federation_library_follow', methods=['get']) +@extend_schema(operation_id='delete_federation_library_follow', methods=['delete']) class LibraryFollowViewSet( mixins.CreateModelMixin, mixins.ListModelMixin, @@ -77,6 +86,7 @@ class LibraryFollowViewSet( context["actor"] = self.request.user.actor return context + @extend_schema(operation_id='accept_federation_library_follow') @decorators.action(methods=["post"], detail=True) def accept(self, request, *args, **kwargs): try: @@ -88,6 +98,7 @@ class LibraryFollowViewSet( update_follow(follow, approved=True) return response.Response(status=204) + @extend_schema(operation_id='reject_federation_library_follow') @decorators.action(methods=["post"], detail=True) def reject(self, request, *args, **kwargs): try: @@ -100,6 +111,7 @@ class LibraryFollowViewSet( update_follow(follow, approved=False) return response.Response(status=204) + @extend_schema(operation_id='get_all_federation_library_follows') @decorators.action(methods=["get"], detail=False) def all(self, request, *args, **kwargs): """ diff --git a/api/funkwhale_api/federation/decorators.py b/api/funkwhale_api/federation/decorators.py index 3d2d62567..04052417a 100644 --- a/api/funkwhale_api/federation/decorators.py +++ b/api/funkwhale_api/federation/decorators.py @@ -5,6 +5,8 @@ from rest_framework import permissions from rest_framework import response from rest_framework import status +from drf_spectacular.utils import extend_schema + from funkwhale_api.common import utils as common_utils from . import api_serializers @@ -42,8 +44,12 @@ def fetches_route(): serializer = api_serializers.FetchSerializer(fetch) return response.Response(serializer.data, status=status.HTTP_201_CREATED) - return decorators.action( - methods=["get", "post"], - detail=True, - permission_classes=[permissions.IsAuthenticated], - )(fetches) + return extend_schema(methods=['post'], responses=api_serializers.FetchSerializer())( + extend_schema(methods=['get'], responses=api_serializers.FetchSerializer(many=True))( + decorators.action( + methods=["get", "post"], + detail=True, + permission_classes=[permissions.IsAuthenticated], + )(fetches) + ) + ) diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index dd8ea7b53..fe2441e00 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -53,6 +53,7 @@ class InstanceSettings(generics.GenericAPIView): ] return api_preferences + @extend_schema(operation_id='get_instance_settings') def get(self, request): queryset = self.get_queryset() data = GlobalPreferenceSerializer(queryset, many=True).data @@ -121,6 +122,7 @@ class SpaManifest(views.APIView): permission_classes = [] authentication_classes = [] + @extend_schema(operation_id='get_spa_manifest') def get(self, request, *args, **kwargs): existing_manifest = middleware.get_spa_file( settings.FUNKWHALE_SPA_HTML_ROOT, "manifest.json" diff --git a/api/funkwhale_api/manage/views.py b/api/funkwhale_api/manage/views.py index dc90ffe79..83c822542 100644 --- a/api/funkwhale_api/manage/views.py +++ b/api/funkwhale_api/manage/views.py @@ -1,6 +1,8 @@ from rest_framework import mixins, response, viewsets from rest_framework import decorators as rest_decorators +from drf_spectacular.utils import extend_schema + from django.db import transaction from django.db.models import Count, Prefetch, Q, Sum, OuterRef, Subquery from django.db.models.functions import Coalesce, Length @@ -93,6 +95,7 @@ class ManageArtistViewSet( required_scope = "instance:libraries" ordering_fields = ["creation_date", "name"] + @extend_schema(operation_id='admin_get_library_artist_stats') @rest_decorators.action(methods=["get"], detail=True) def stats(self, request, *args, **kwargs): artist = self.get_object() @@ -135,6 +138,7 @@ class ManageAlbumViewSet( required_scope = "instance:libraries" ordering_fields = ["creation_date", "title", "release_date"] + @extend_schema(operation_id='admin_get_library_album_stats') @rest_decorators.action(methods=["get"], detail=True) def stats(self, request, *args, **kwargs): album = self.get_object() @@ -196,6 +200,7 @@ class ManageTrackViewSet( "disc_number", ] + @extend_schema(operation_id='admin_get_track_stats') @rest_decorators.action(methods=["get"], detail=True) def stats(self, request, *args, **kwargs): track = self.get_object() @@ -257,6 +262,7 @@ class ManageLibraryViewSet( filterset_class = filters.ManageLibraryFilterSet required_scope = "instance:libraries" + @extend_schema(operation_id='admin_get_library_stats') @rest_decorators.action(methods=["get"], detail=True) def stats(self, request, *args, **kwargs): library = self.get_object() @@ -424,6 +430,7 @@ class ManageDomainViewSet( domain.refresh_from_db() return response.Response(domain.nodeinfo, status=200) + @extend_schema(operation_id='admin_get_federation_domain_stats') @rest_decorators.action(methods=["get"], detail=True) def stats(self, request, *args, **kwargs): domain = self.get_object() @@ -468,6 +475,7 @@ class ManageActorViewSet( return obj + @extend_schema(operation_id='admin_get_account_stats') @rest_decorators.action(methods=["get"], detail=True) def stats(self, request, *args, **kwargs): obj = self.get_object() @@ -709,6 +717,7 @@ class ManageChannelViewSet( required_scope = "instance:libraries" ordering_fields = ["creation_date", "name"] + @extend_schema(operation_id='admin_get_channel_stats') @rest_decorators.action(methods=["get"], detail=True) def stats(self, request, *args, **kwargs): channel = self.get_object() diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index d7eba93cf..fa78698b0 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -16,6 +16,8 @@ from rest_framework import views, viewsets from rest_framework.decorators import action from rest_framework.response import Response +from drf_spectacular.utils import extend_schema + import requests.exceptions from funkwhale_api.common import decorators as common_decorators @@ -66,7 +68,9 @@ def get_libraries(filter_uploads): serializer = federation_api_serializers.LibrarySerializer(qs, many=True) return Response(serializer.data) - return libraries + return extend_schema(responses=federation_api_serializers.LibrarySerializer(many=True))( + action(methods=["get"], detail=True)(libraries) + ) def refetch_obj(obj, queryset): @@ -167,13 +171,9 @@ class ArtistViewSet( Prefetch("albums", queryset=albums), TAG_PREFETCH ) - libraries = action(methods=["get"], detail=True)( - get_libraries( - filter_uploads=lambda o, uploads: uploads.filter( - Q(track__artist=o) | Q(track__album__artist=o) - ) - ) - ) + libraries = get_libraries(lambda o, uploads: uploads.filter( + Q(track__artist=o) | Q(track__album__artist=o) + )) class AlbumViewSet( @@ -231,9 +231,7 @@ class AlbumViewSet( Prefetch("tracks", queryset=tracks), TAG_PREFETCH ) - libraries = action(methods=["get"], detail=True)( - get_libraries(filter_uploads=lambda o, uploads: uploads.filter(track__album=o)) - ) + libraries = get_libraries(lambda o, uploads: uploads.filter(track__album=o)) def get_serializer_class(self): if self.action in ["create"]: @@ -430,9 +428,7 @@ class TrackViewSet( ) return queryset.prefetch_related(TAG_PREFETCH) - libraries = action(methods=["get"], detail=True)( - get_libraries(filter_uploads=lambda o, uploads: uploads.filter(track=o)) - ) + libraries = get_libraries(lambda o, uploads: uploads.filter(track=o)) def get_serializer_context(self): context = super().get_serializer_context() @@ -744,6 +740,7 @@ class UploadViewSet( qs = qs.playable_by(actor) return qs + @extend_schema(operation_id='get_upload_metadata') @action(methods=["get"], detail=True, url_path="audio-file-metadata") def audio_file_metadata(self, request, *args, **kwargs): upload = self.get_object() @@ -802,6 +799,7 @@ class Search(views.APIView): required_scope = "libraries" anonymous_policy = "setting" + @extend_schema(operation_id='get_search_results') def get(self, request, *args, **kwargs): query = request.GET.get("query", request.GET.get("q", "")) or "" query = query.strip() diff --git a/api/funkwhale_api/playlists/views.py b/api/funkwhale_api/playlists/views.py index e4b1d3037..de4a2e633 100644 --- a/api/funkwhale_api/playlists/views.py +++ b/api/funkwhale_api/playlists/views.py @@ -1,9 +1,12 @@ from django.db import transaction from django.db.models import Count + from rest_framework import exceptions, mixins, viewsets from rest_framework.decorators import action from rest_framework.response import Response +from drf_spectacular.utils import extend_schema + from funkwhale_api.common import fields, permissions from funkwhale_api.music import utils as music_utils from funkwhale_api.users.oauth import permissions as oauth_permissions @@ -38,6 +41,7 @@ class PlaylistViewSet( filterset_class = filters.PlaylistFilter ordering_fields = ("id", "name", "creation_date", "modification_date") + @extend_schema(responses=serializers.PlaylistTrackSerializer(many=True)) @action(methods=["get"], detail=True) def tracks(self, request, *args, **kwargs): playlist = self.get_object() @@ -48,6 +52,7 @@ class PlaylistViewSet( data = {"count": len(plts), "results": serializer.data} return Response(data, status=200) + @extend_schema(operation_id="add_to_playlist", request=serializers.PlaylistAddManySerializer) @action(methods=["post"], detail=True) @transaction.atomic def add(self, request, *args, **kwargs): @@ -72,6 +77,7 @@ class PlaylistViewSet( data = {"count": len(plts), "results": serializer.data} return Response(data, status=201) + @extend_schema(operation_id="clear_playlist") @action(methods=["delete"], detail=True) @transaction.atomic def clear(self, request, *args, **kwargs): @@ -93,6 +99,7 @@ class PlaylistViewSet( ), ) + @extend_schema(operation_id="remove_from_playlist") @action(methods=["post", "delete"], detail=True) @transaction.atomic def remove(self, request, *args, **kwargs): @@ -111,6 +118,7 @@ class PlaylistViewSet( return Response(status=204) + @extend_schema(operation_id="reorder_track_in_playlist") @action(methods=["post"], detail=True) @transaction.atomic def move(self, request, *args, **kwargs): diff --git a/api/funkwhale_api/radios/views.py b/api/funkwhale_api/radios/views.py index b8c10f1f3..51241cc61 100644 --- a/api/funkwhale_api/radios/views.py +++ b/api/funkwhale_api/radios/views.py @@ -1,8 +1,11 @@ from django.db.models import Q + from rest_framework import mixins, status, viewsets from rest_framework.decorators import action from rest_framework.response import Response +from drf_spectacular.utils import extend_schema + from funkwhale_api.common import permissions as common_permissions from funkwhale_api.music.serializers import TrackSerializer from funkwhale_api.music import utils as music_utils @@ -63,6 +66,7 @@ class RadioViewSet( ) return Response(serializer.data) + @extend_schema(operation_id='validate_radio') @action(methods=["post"], detail=False) def validate(self, request, *args, **kwargs): try: @@ -124,6 +128,7 @@ class RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet) queryset = models.RadioSessionTrack.objects.all() permission_classes = [] + @extend_schema(operation_id='get_next_radio_track') def create(self, request, *args, **kwargs): serializer = self.get_serializer(data=request.data) serializer.is_valid(raise_exception=True) diff --git a/api/funkwhale_api/schema.py b/api/funkwhale_api/schema.py new file mode 100644 index 000000000..0ba5920fe --- /dev/null +++ b/api/funkwhale_api/schema.py @@ -0,0 +1,69 @@ +from drf_spectacular.openapi import AutoSchema + +from pluralizer import Pluralizer + +import re + + +class CustomAutoSchema(AutoSchema): + method_mapping = { + 'get': 'get', + 'post': 'create', + 'put': 'update', + 'patch': 'partial_update', + 'delete': 'delete', + } + + pluralizer = Pluralizer() + + + def get_operation_id(self): + # Modified operation id getter from + # https://github.com/tfranzel/drf-spectacular/blob/6973aa48f4ff08f7f33799d50c288fcc79ea8076/drf_spectacular/openapi.py#L424-L441 + + tokenized_path = self._tokenize_path() + + # replace dashes as they can be problematic later in code generation + tokenized_path = [t.replace('-', '_') for t in tokenized_path] + + # replace plural forms with singular forms + tokenized_path = [self.pluralizer.singular(t) for t in tokenized_path] + + if not tokenized_path: + tokenized_path.append('root') + + model = tokenized_path.pop() + + if self.method == 'GET' and self._is_list_view(): + action = 'get' + model = self.pluralizer.plural(model) + else: + action = self.method_mapping[self.method.lower()] + + if re.search(r'', self.path_regex): + tokenized_path.append('formatted') + + # rename `get_radio_radio_track` to `get_radio_track` + if len(tokenized_path) > 1 and tokenized_path[1] == 'radio' and tokenized_path[1] == 'radio': + tokenized_path.pop(0) + + # rename `get_manage_channel` to `admin_get_channel` + elif len(tokenized_path) > 0 and tokenized_path[0] == 'manage': + tokenized_path.pop(0) + + # rename `get_manage_library_album` to `admin_get_album` + if len(tokenized_path) > 0 and tokenized_path[0] == 'library': + tokenized_path.pop(0) + + # rename `get_manage_user_users` to `admin_get_users` + elif len(tokenized_path) > 0 and tokenized_path[0] == 'user': + tokenized_path.pop(0) + + # rename `get_manage_moderation_note` to `moderation_get_note` + elif len(tokenized_path) > 0 and tokenized_path[0] == 'moderation': + tokenized_path.pop(0) + return '_'.join(['moderation', action] + tokenized_path + [model]) + + return '_'.join(['admin', action] + tokenized_path + [model]) + + return '_'.join([action] + tokenized_path + [model]) diff --git a/api/funkwhale_api/users/oauth/views.py b/api/funkwhale_api/users/oauth/views.py index c12026501..ee8cbb3f2 100644 --- a/api/funkwhale_api/users/oauth/views.py +++ b/api/funkwhale_api/users/oauth/views.py @@ -4,9 +4,12 @@ import urllib.parse from django import http from django.utils import timezone from django.db.models import Q + from rest_framework import mixins, permissions, response, views, viewsets from rest_framework.decorators import action +from drf_spectacular.utils import extend_schema + from oauth2_provider import exceptions as oauth2_exceptions from oauth2_provider import views as oauth_views from oauth2_provider.settings import oauth2_settings @@ -83,6 +86,7 @@ class ApplicationViewSet( qs = qs.filter(user=self.request.user) return qs + @extend_schema(operation_id='refresh_oauth_token') @action( detail=True, methods=["post"], diff --git a/api/funkwhale_api/users/views.py b/api/funkwhale_api/users/views.py index b9891e594..1d65a092d 100644 --- a/api/funkwhale_api/users/views.py +++ b/api/funkwhale_api/users/views.py @@ -12,6 +12,8 @@ from rest_framework import viewsets from rest_framework.decorators import action from rest_framework.response import Response +from drf_spectacular.utils import extend_schema + from funkwhale_api.common import authentication from funkwhale_api.common import preferences from funkwhale_api.common import throttling @@ -19,6 +21,7 @@ from funkwhale_api.common import throttling from . import models, serializers, tasks +@extend_schema(operation_id='register', methods=['post']) class RegisterView(registration_views.RegisterView): serializer_class = serializers.RegisterSerializer permission_classes = [] @@ -43,18 +46,22 @@ class RegisterView(registration_views.RegisterView): return user +@extend_schema(operation_id='verify_email') class VerifyEmailView(registration_views.VerifyEmailView): action = "verify-email" +@extend_schema(operation_id='change_password') class PasswordChangeView(rest_auth_views.PasswordChangeView): action = "password-change" +@extend_schema(operation_id='reset_password') class PasswordResetView(rest_auth_views.PasswordResetView): action = "password-reset" +@extend_schema(operation_id='confirm_password_reset') class PasswordResetConfirmView(rest_auth_views.PasswordResetConfirmView): action = "password-reset-confirm" @@ -66,6 +73,8 @@ class UserViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): lookup_value_regex = r"[a-zA-Z0-9-_.]+" required_scope = "profile" + @extend_schema(operation_id='get_authenticated_user', methods=['get']) + @extend_schema(operation_id='delete_authenticated_user', methods=['delete']) @action(methods=["get", "delete"], detail=False) def me(self, request, *args, **kwargs): """Return information about the current user or delete it""" @@ -80,6 +89,7 @@ class UserViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): serializer = serializers.MeSerializer(request.user) return Response(serializer.data) + @extend_schema(operation_id='update_settings') @action(methods=["post"], detail=False, url_name="settings", url_path="settings") def set_settings(self, request, *args, **kwargs): """Return information about the current user or delete it""" @@ -111,6 +121,7 @@ class UserViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): data = {"subsonic_api_token": self.request.user.subsonic_api_token} return Response(data) + @extend_schema(operation_id='change_email') @action( methods=["post"], required_scope="security", @@ -138,6 +149,8 @@ class UserViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): return super().partial_update(request, *args, **kwargs) +@extend_schema(operation_id='login') +@action(methods=['post'], detail=False) def login(request): throttling.check_request(request, "login") if request.method != "POST": @@ -157,6 +170,8 @@ def login(request): return response +@extend_schema(operation_id='logout') +@action(methods=['post'], detail=False) def logout(request): if request.method != "POST": return http.HttpResponse(status=405) diff --git a/api/operations.json b/api/operations.json new file mode 100644 index 000000000..edb120fa9 --- /dev/null +++ b/api/operations.json @@ -0,0 +1,594 @@ +{ + "/api/v1/activity/": { + "get": "get_activity" + }, + "/api/v1/albums/": { + "get": "get_albums", + "post": "create_album" + }, + "/api/v1/albums/{id}/": { + "get": "get_album", + "delete": "delete_album" + }, + "/api/v1/albums/{id}/fetches/": { + "get": "get_album_fetches", + "post": "create_album_fetch" + }, + "/api/v1/albums/{id}/libraries/": { + "get": "get_album_libraries" + }, + "/api/v1/albums/{id}/mutations/": { + "get": "get_album_mutations", + "post": "create_album_mutation" + }, + "/api/v1/artists/": { + "get": "get_artists" + }, + "/api/v1/artists/{id}/": { + "get": "get_artist" + }, + "/api/v1/artists/{id}/fetches/": { + "get": "get_artist_fetches", + "post": "create_artist_fetch" + }, + "/api/v1/artists/{id}/libraries/": { + "get": "get_artist_libraries" + }, + "/api/v1/artists/{id}/mutations/": { + "get": "get_artist_mutations", + "post": "create_artist_mutation" + }, + "/api/v1/attachments/": { + "post": "create_attachment" + }, + "/api/v1/attachments/{uuid}/": { + "get": "get_attachment", + "delete": "delete_attachment" + }, + "/api/v1/attachments/{uuid}/proxy/": { + "get": "get_attachment_proxy" + }, + "/api/v1/auth/password/change/": { + "post": "change_password" + }, + "/api/v1/auth/password/reset/": { + "post": "reset_password" + }, + "/api/v1/auth/password/reset/confirm/": { + "post": "confirm_password_reset" + }, + "/api/v1/auth/registration/": { + "post": "register" + }, + "/api/v1/auth/registration/change-password/": { + "post": "change_password_2" + }, + "/api/v1/auth/registration/verify-email/": { + "post": "verify_email" + }, + "/api/v1/auth/user/": { + "get": "get_auth_user", + "put": "update_auth_user", + "patch": "partial_update_auth_user" + }, + "/api/v1/channels/": { + "get": "get_channels", + "post": "create_channel" + }, + "/api/v1/channels/{composite}/": { + "get": "get_channel", + "put": "update_channel", + "patch": "partial_update_channel", + "delete": "delete_channel" + }, + "/api/v1/channels/{composite}/rss/": { + "get": "get_channel_rss" + }, + "/api/v1/channels/{composite}/subscribe/": { + "post": "subscribe_channel" + }, + "/api/v1/channels/{composite}/unsubscribe/": { + "post": "unsubscribe_channel_2", + "delete": "unsubscribe_channel" + }, + "/api/v1/channels/metadata-choices/": { + "get": "get_channel_metadata_choices" + }, + "/api/v1/channels/rss-subscribe/": { + "post": "subscribe_channel_rss" + }, + "/api/v1/favorites/tracks/": { + "get": "get_favorite_tracks", + "post": "favorite_track" + }, + "/api/v1/favorites/tracks/{id}/": { + "delete": "delete_favorite_track" + }, + "/api/v1/favorites/tracks/all/": { + "get": "get_all_favorite_tracks" + }, + "/api/v1/favorites/tracks/remove/": { + "post": "unfavorite_track_2", + "delete": "unfavorite_track" + }, + "/api/v1/federation/actors/{full_username}/": { + "get": "get_federation_actor" + }, + "/api/v1/federation/actors/{full_username}/libraries/": { + "get": "get_federation_actor_library" + }, + "/api/v1/federation/domains/": { + "get": "get_federation_domains" + }, + "/api/v1/federation/domains/{name}/": { + "get": "get_federation_domain" + }, + "/api/v1/federation/fetches/": { + "post": "create_federation_fetch" + }, + "/api/v1/federation/fetches/{id}/": { + "get": "get_federation_fetch" + }, + "/api/v1/federation/follows/library/": { + "get": "get_federation_library_follows", + "post": "create_federation_library_follow" + }, + "/api/v1/federation/follows/library/{uuid}/": { + "get": "get_federation_library_follow", + "delete": "delete_federation_library_follow" + }, + "/api/v1/federation/follows/library/{uuid}/accept/": { + "post": "accept_federation_library_follow" + }, + "/api/v1/federation/follows/library/{uuid}/reject/": { + "post": "reject_federation_library_follow" + }, + "/api/v1/federation/follows/library/all/": { + "get": "get_all_federation_library_follows" + }, + "/api/v1/federation/inbox/": { + "get": "get_federation_inboxes" + }, + "/api/v1/federation/inbox/{id}/": { + "get": "get_federation_inbox", + "put": "update_federation_inbox", + "patch": "partial_update_federation_inbox" + }, + "/api/v1/federation/inbox/action/": { + "post": "create_federation_inbox_action" + }, + "/api/v1/federation/libraries/{uuid}/": { + "get": "get_federation_library" + }, + "/api/v1/federation/libraries/{uuid}/scan/": { + "post": "create_federation_library_scan" + }, + "/api/v1/federation/libraries/fetch/": { + "post": "create_federation_library_fetch" + }, + "/api/v1/history/listenings/": { + "get": "get_history_listenings", + "post": "create_history_listening" + }, + "/api/v1/history/listenings/{id}/": { + "get": "get_history_listening" + }, + "/api/v1/instance/admin/settings/": { + "get": "get_instance_admin_settings" + }, + "/api/v1/instance/admin/settings/{id}/": { + "get": "get_instance_admin_setting", + "put": "update_instance_admin_setting", + "patch": "partial_update_instance_admin_setting" + }, + "/api/v1/instance/admin/settings/bulk/": { + "post": "create_instance_admin_setting_bulk" + }, + "/api/v1/instance/nodeinfo/2.0/": { + "get": "get_instance_nodeinfo_2.0" + }, + "/api/v1/instance/settings/": { + "get": "get_instance_settings" + }, + "/api/v1/instance/spa-manifest.json": { + "get": "get_spa_manifest" + }, + "/api/v1/libraries/": { + "get": "get_libraries", + "post": "create_library" + }, + "/api/v1/libraries/{uuid}/": { + "get": "get_library", + "put": "update_library", + "patch": "partial_update_library", + "delete": "delete_library" + }, + "/api/v1/libraries/{uuid}/follows/": { + "get": "get_library_follow" + }, + "/api/v1/libraries/fs-import/": { + "get": "get_library_fs_import", + "post": "create_library_fs_import", + "delete": "delete_library_fs_import" + }, + "/api/v1/licenses/": { + "get": "get_licenses" + }, + "/api/v1/licenses/{code}/": { + "get": "get_license" + }, + "/api/v1/listen/{uuid}/": { + "get": "get_listen" + }, + "/api/v1/manage/accounts/": { + "get": "admin_get_accounts" + }, + "/api/v1/manage/accounts/{id}/": { + "get": "admin_get_account" + }, + "/api/v1/manage/accounts/{id}/stats/": { + "get": "admin_get_account_stats" + }, + "/api/v1/manage/accounts/action/": { + "post": "admin_create_account_action" + }, + "/api/v1/manage/channels/": { + "get": "admin_get_channels" + }, + "/api/v1/manage/channels/{composite}/": { + "get": "admin_get_channel", + "delete": "admin_delete_channel" + }, + "/api/v1/manage/channels/{composite}/stats/": { + "get": "admin_get_channel_stats" + }, + "/api/v1/manage/federation/domains/": { + "get": "admin_get_federation_domains", + "post": "admin_create_federation_domain" + }, + "/api/v1/manage/federation/domains/{name}/": { + "get": "admin_get_federation_domain", + "put": "admin_update_federation_domain", + "patch": "admin_partial_update_federation_domain" + }, + "/api/v1/manage/federation/domains/{name}/nodeinfo/": { + "get": "admin_get_federation_domain_nodeinfo" + }, + "/api/v1/manage/federation/domains/{name}/stats/": { + "get": "admin_get_federation_domain_stats" + }, + "/api/v1/manage/federation/domains/action/": { + "post": "admin_create_federation_domain_action" + }, + "/api/v1/manage/library/albums/": { + "get": "admin_get_albums" + }, + "/api/v1/manage/library/albums/{id}/": { + "get": "admin_get_album", + "delete": "admin_delete_album" + }, + "/api/v1/manage/library/albums/{id}/stats/": { + "get": "admin_get_library_album_stats" + }, + "/api/v1/manage/library/albums/action/": { + "post": "admin_create_album_action" + }, + "/api/v1/manage/library/artists/": { + "get": "admin_get_artists" + }, + "/api/v1/manage/library/artists/{id}/": { + "get": "admin_get_artist", + "delete": "admin_delete_artist" + }, + "/api/v1/manage/library/artists/{id}/stats/": { + "get": "admin_get_library_artist_stats" + }, + "/api/v1/manage/library/artists/action/": { + "post": "admin_create_artist_action" + }, + "/api/v1/manage/library/libraries/": { + "get": "admin_get_libraries" + }, + "/api/v1/manage/library/libraries/{uuid}/": { + "get": "admin_get_library", + "put": "admin_update_library", + "patch": "admin_partial_update_library", + "delete": "admin_delete_library" + }, + "/api/v1/manage/library/libraries/{uuid}/stats/": { + "get": "admin_get_library_stats" + }, + "/api/v1/manage/library/libraries/action/": { + "post": "admin_create_library_action" + }, + "/api/v1/manage/library/tracks/": { + "get": "admin_get_tracks" + }, + "/api/v1/manage/library/tracks/{id}/": { + "get": "admin_get_track", + "delete": "admin_delete_track" + }, + "/api/v1/manage/library/tracks/{id}/stats/": { + "get": "admin_get_track_stats" + }, + "/api/v1/manage/library/tracks/action/": { + "post": "admin_create_track_action" + }, + "/api/v1/manage/library/uploads/": { + "get": "admin_get_uploads" + }, + "/api/v1/manage/library/uploads/{uuid}/": { + "get": "admin_get_upload", + "delete": "admin_delete_upload" + }, + "/api/v1/manage/library/uploads/action/": { + "post": "admin_create_upload_action" + }, + "/api/v1/manage/moderation/instance-policies/": { + "get": "moderation_get_instance_policies", + "post": "moderation_create_instance_policy" + }, + "/api/v1/manage/moderation/instance-policies/{id}/": { + "get": "moderation_get_instance_policy", + "put": "moderation_update_instance_policy", + "patch": "moderation_partial_update_instance_policy", + "delete": "moderation_delete_instance_policy" + }, + "/api/v1/manage/moderation/notes/": { + "get": "moderation_get_notes", + "post": "moderation_create_note" + }, + "/api/v1/manage/moderation/notes/{uuid}/": { + "get": "moderation_get_note", + "delete": "moderation_delete_note" + }, + "/api/v1/manage/moderation/reports/": { + "get": "moderation_get_reports" + }, + "/api/v1/manage/moderation/reports/{uuid}/": { + "get": "moderation_get_report", + "put": "moderation_update_report", + "patch": "moderation_partial_update_report" + }, + "/api/v1/manage/moderation/requests/": { + "get": "moderation_get_requests" + }, + "/api/v1/manage/moderation/requests/{uuid}/": { + "get": "moderation_get_request", + "put": "moderation_update_request", + "patch": "moderation_partial_update_request" + }, + "/api/v1/manage/tags/": { + "get": "admin_get_tags", + "post": "admin_create_tag" + }, + "/api/v1/manage/tags/{name}/": { + "get": "admin_get_tag", + "delete": "admin_delete_tag" + }, + "/api/v1/manage/tags/action/": { + "post": "admin_create_tag_action" + }, + "/api/v1/manage/users/invitations/": { + "get": "admin_get_invitations", + "post": "admin_create_invitation" + }, + "/api/v1/manage/users/invitations/{id}/": { + "get": "admin_get_invitation", + "put": "admin_update_invitation", + "patch": "admin_partial_update_invitation" + }, + "/api/v1/manage/users/invitations/action/": { + "post": "admin_create_invitation_action" + }, + "/api/v1/manage/users/users/": { + "get": "admin_get_users" + }, + "/api/v1/manage/users/users/{id}/": { + "get": "admin_get_user", + "put": "admin_update_user", + "patch": "admin_partial_update_user" + }, + "/api/v1/moderation/content-filters/": { + "get": "get_moderation_content_filters", + "post": "create_moderation_content_filter" + }, + "/api/v1/moderation/content-filters/{uuid}/": { + "get": "get_moderation_content_filter", + "delete": "delete_moderation_content_filter" + }, + "/api/v1/moderation/reports/": { + "post": "create_moderation_report" + }, + "/api/v1/mutations/": { + "get": "get_mutations" + }, + "/api/v1/mutations/{uuid}/": { + "get": "get_mutation", + "delete": "delete_mutation" + }, + "/api/v1/mutations/{uuid}/approve/": { + "post": "approve_mutation" + }, + "/api/v1/mutations/{uuid}/reject/": { + "post": "reject_mutation" + }, + "/api/v1/oauth/apps/": { + "get": "get_oauth_apps", + "post": "create_oauth_app" + }, + "/api/v1/oauth/apps/{client_id}/": { + "get": "get_oauth_app", + "put": "update_oauth_app", + "patch": "partial_update_oauth_app", + "delete": "delete_oauth_app" + }, + "/api/v1/oauth/apps/{client_id}/refresh-token/": { + "post": "refresh_oauth_token" + }, + "/api/v1/oauth/authorize/": { + "get": "get_oauth_authorize", + "post": "create_oauth_authorize", + "put": "update_oauth_authorize" + }, + "/api/v1/oauth/grants/": { + "get": "get_oauth_grants" + }, + "/api/v1/oauth/grants/{client_id}/": { + "get": "get_oauth_grant", + "delete": "delete_oauth_grant" + }, + "/api/v1/oembed/": { + "get": "get_oembed" + }, + "/api/v1/playlists/": { + "get": "get_playlists", + "post": "create_playlist" + }, + "/api/v1/playlists/{id}/": { + "get": "get_playlist", + "put": "update_playlist", + "patch": "partial_update_playlist", + "delete": "delete_playlist" + }, + "/api/v1/playlists/{id}/add/": { + "post": "add_to_playlist" + }, + "/api/v1/playlists/{id}/clear/": { + "delete": "clear_playlist" + }, + "/api/v1/playlists/{id}/move/": { + "post": "reorder_track_in_playlist" + }, + "/api/v1/playlists/{id}/remove/": { + "post": "remove_from_playlist_2", + "delete": "remove_from_playlist" + }, + "/api/v1/playlists/{id}/tracks/": { + "get": "get_playlist_tracks" + }, + "/api/v1/plugins/": { + "get": "get_plugins", + "post": "create_plugin" + }, + "/api/v1/plugins/{id}/": { + "get": "get_plugin" + }, + "/api/v1/plugins/{id}/disable/": { + "post": "disable_plugin" + }, + "/api/v1/plugins/{id}/enable/": { + "post": "enable_plugin" + }, + "/api/v1/plugins/{id}/scan/": { + "post": "create_plugin_scan" + }, + "/api/v1/radios/radios/": { + "get": "get_radio_radios", + "post": "create_radio_radio" + }, + "/api/v1/radios/radios/{id}/": { + "get": "get_radio_radio", + "put": "update_radio_radio", + "patch": "partial_update_radio_radio", + "delete": "delete_radio_radio" + }, + "/api/v1/radios/radios/{id}/tracks/": { + "get": "get_radio_track" + }, + "/api/v1/radios/radios/filters/": { + "get": "get_radio_filter" + }, + "/api/v1/radios/radios/validate/": { + "post": "validate_radio" + }, + "/api/v1/radios/sessions/": { + "post": "create_radio_session" + }, + "/api/v1/radios/sessions/{id}/": { + "get": "get_radio_session" + }, + "/api/v1/radios/tracks/": { + "post": "get_next_radio_track" + }, + "/api/v1/rate-limit/": { + "get": "get_rate_limit" + }, + "/api/v1/search": { + "get": "get_search_results" + }, + "/api/v1/stream/{uuid}/": { + "get": "get_stream" + }, + "/api/v1/subscriptions/": { + "get": "get_subscriptions" + }, + "/api/v1/subscriptions/{uuid}/": { + "get": "get_subscription" + }, + "/api/v1/subscriptions/all/": { + "get": "get_all_subscriptions" + }, + "/api/v1/tags/": { + "get": "get_tags" + }, + "/api/v1/tags/{name}/": { + "get": "get_tag" + }, + "/api/v1/text-preview/": { + "post": "preview_text" + }, + "/api/v1/tracks/": { + "get": "get_tracks" + }, + "/api/v1/tracks/{id}/": { + "get": "get_track", + "delete": "delete_track" + }, + "/api/v1/tracks/{id}/fetches/": { + "get": "get_track_fetches", + "post": "create_track_fetch" + }, + "/api/v1/tracks/{id}/libraries/": { + "get": "get_track_libraries" + }, + "/api/v1/tracks/{id}/mutations/": { + "get": "get_track_mutations", + "post": "create_track_mutation" + }, + "/api/v1/uploads/": { + "get": "get_uploads", + "post": "create_upload" + }, + "/api/v1/uploads/{uuid}/": { + "get": "get_upload", + "put": "update_upload", + "patch": "partial_update_upload", + "delete": "delete_upload" + }, + "/api/v1/uploads/{uuid}/audio-file-metadata/": { + "get": "get_upload_metadata" + }, + "/api/v1/uploads/action/": { + "post": "create_upload_action" + }, + "/api/v1/users/{username}/": { + "put": "update_user", + "patch": "partial_update_user" + }, + "/api/v1/users/{username}/subsonic-token/": { + "get": "get_user_subsonic_token", + "post": "create_user_subsonic_token", + "delete": "delete_user_subsonic_token" + }, + "/api/v1/users/change-email/": { + "post": "change_email" + }, + "/api/v1/users/me/": { + "get": "get_authenticated_user", + "delete": "delete_authenticated_user" + }, + "/api/v1/users/settings/": { + "post": "update_settings" + } +} diff --git a/api/pyproject.toml b/api/pyproject.toml index bc6c4ee29..bfa4f91ce 100644 --- a/api/pyproject.toml +++ b/api/pyproject.toml @@ -58,6 +58,7 @@ django-cache-memoize = "0.1.10" requests-http-message-signatures = "==0.3.1" drf-spectacular = "==0.23.1" sentry-sdk = "==1.9.8" +pluralizer = "==1.2.0" [tool.poetry.dev-dependencies] flake8 = "==3.9.2" diff --git a/api/schema.yml b/api/schema.yml new file mode 100644 index 000000000..a2da38040 --- /dev/null +++ b/api/schema.yml @@ -0,0 +1,13390 @@ +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 `. \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\n\n\n\n\n\n\n\n\n\n\ + \n\n\ + \n\n\n\n\n\ + \n\n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\ + \n\n\n\n\n\n\n\n\ + \n\n\n\n
Rate limiting\ + \ headers
HeaderExample valueDescription\ + \ value
X-RateLimit-Limit50The number of allowed requests whithin a given period
X-RateLimit-Duration3600The\ + \ time window, in seconds, during which those requests are accounted for.
X-RateLimit-ScopeloginThe\ + \ name of the scope as computed for the request
X-RateLimit-Remaining42How many requests can be sent with the same scope before the\ + \ limit applies
Retry-After (if X-RateLimit-Remaining\ + \ is 0)3543How many seconds to wait before a retry
X-RateLimit-Reset1568126089A\ + \ timestamp indicating when X-RateLimit-Remaining will return to\ + \ its higher possible value
X-RateLimit-ResetSeconds3599How many seconds to wait before X-RateLimit-Remaining\ + \ returns to its higher possible value
\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: get_activity + 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: get_albums + 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: create_album + 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: get_album + 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: delete_album + 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: get_album_fetches + 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: path + name: id + schema: + type: integer + description: A unique integer value identifying this album. + required: true + - 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/PaginatedFetchList' + description: '' + post: + operationId: create_album_fetch + 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/Fetch' + description: '' + /api/v1/albums/{id}/libraries/: + get: + operationId: get_album_libraries + 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: path + name: id + schema: + type: integer + description: A unique integer value identifying this album. + required: true + - 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/PaginatedLibraryList' + description: '' + /api/v1/albums/{id}/mutations/: + get: + operationId: get_album_mutations + 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: path + name: id + schema: + type: integer + description: A unique integer value identifying this album. + required: true + - 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/PaginatedAPIMutationList' + description: '' + post: + operationId: create_album_mutation + 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/APIMutation' + description: '' + /api/v1/artists/: + get: + operationId: get_artists + 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: get_artist + 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: get_artist_fetches + 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: path + name: id + schema: + type: integer + description: A unique integer value identifying this artist. + required: true + - 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/PaginatedFetchList' + description: '' + post: + operationId: create_artist_fetch + 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/Fetch' + description: '' + /api/v1/artists/{id}/libraries/: + get: + operationId: get_artist_library + 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: get_artist_mutations + 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: path + name: id + schema: + type: integer + description: A unique integer value identifying this artist. + required: true + - 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/PaginatedAPIMutationList' + description: '' + post: + operationId: create_artist_mutation + 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/APIMutation' + description: '' + /api/v1/attachments/: + post: + operationId: create_attachment + 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: get_attachment + 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: delete_attachment + 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: get_attachment_proxy + 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: change_password + 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: reset_password + 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: confirm_password_reset + 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: register + 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: change_password_2 + 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: verify_email + 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: get_auth_user + 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: update_auth_user + 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: partial_update_auth_user + 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: get_channels + 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: create_channel + 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: get_channel + 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: update_channel + 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: partial_update_channel + 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: delete_channel + 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: get_channel_rss + 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: subscribe_channel + 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: unsubscribe_channel_2 + 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: unsubscribe_channel + 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: get_channel_metadata_choices + tags: + - channels + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Channel' + description: '' + /api/v1/channels/rss-subscribe/: + post: + operationId: subscribe_channel_rss + 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: get_favorite_tracks + 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: favorite_track + 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: delete_favorite_track + 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: get_all_favorite_tracks + 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: unfavorite_track_2 + 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: unfavorite_track + tags: + - favorites + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '204': + description: No response body + /api/v1/federation/actors/{full_username}/: + get: + operationId: get_federation_actor + 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: get_federation_actor_library + 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: get_federation_domains + 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: get_federation_domain + 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: create_federation_fetch + 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: get_federation_fetch + 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: get_federation_library_follows + 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: create_federation_library_follow + 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: get_federation_library_follow + 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: delete_federation_library_follow + 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: accept_federation_library_follow + 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: reject_federation_library_follow + 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: get_all_federation_library_follows + 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: get_federation_inboxes + 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: get_federation_inbox + 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: update_federation_inbox + 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: partial_update_federation_inbox + 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: create_federation_inbox_action + 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: get_federation_library + 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: create_federation_library_scan + 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: create_federation_library_fetch + 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: get_history_listenings + 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: create_history_listening + 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: get_history_listening + 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: get_instance_admin_settings + 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: get_instance_admin_setting + 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: update_instance_admin_setting + 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: partial_update_instance_admin_setting + 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: create_instance_admin_setting_bulk + 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: get_instance_nodeinfo_2.0 + tags: + - instance + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/NodeInfo20' + description: '' + /api/v1/instance/settings/: + get: + operationId: get_instance_settings + tags: + - instance + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/GlobalPreference' + description: '' + /api/v1/instance/spa-manifest.json: + get: + operationId: get_spa_manifest + tags: + - instance + responses: + '200': + description: No response body + /api/v1/libraries/: + get: + operationId: get_libraries + 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: create_library + 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: get_library + 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: update_library + 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: partial_update_library + 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: delete_library + 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: get_library_follow + 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: get_library_fs_import + tags: + - libraries + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/LibraryForOwner' + description: '' + post: + operationId: create_library_fs_import + 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: delete_library_fs_import + tags: + - libraries + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '204': + description: No response body + /api/v1/licenses/: + get: + operationId: get_licenses + 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: get_license + 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: get_listen + 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: admin_get_accounts + 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: admin_get_account + 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: admin_get_account_stats + 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: admin_create_account_action + 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: admin_get_channels + 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: admin_get_channel + 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: admin_delete_channel + 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: admin_get_channel_stats + 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: admin_get_federation_domains + 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: admin_create_federation_domain + 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: admin_get_federation_domain + 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: admin_update_federation_domain + 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: admin_partial_update_federation_domain + 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: admin_get_federation_domain_nodeinfo + 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: admin_get_federation_domain_stats + 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: admin_create_federation_domain_action + 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: admin_get_library_albums + 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: admin_get_library_album + 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: admin_delete_library_album + 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: admin_get_library_album_stats + 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: admin_create_library_album_action + 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: admin_get_library_artists + 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: admin_get_library_artist + 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: admin_delete_library_artist + 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: admin_get_library_artist_stats + 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: admin_create_library_artist_action + 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: admin_get_library_libraries + 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: admin_get_library_library + 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: admin_update_library_library + 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: admin_partial_update_library_library + 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: admin_delete_library_library + 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: admin_get_library_stats + 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: admin_create_library_library_action + 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: admin_get_library_tracks + 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: admin_get_library_track + 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: admin_delete_library_track + 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: admin_get_track_stats + 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: admin_create_library_track_action + 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: admin_get_library_uploads + 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: admin_get_library_upload + 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: admin_delete_library_upload + 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: admin_create_library_upload_action + 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: admin_get_moderation_instance_policies + 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: admin_create_moderation_instance_policy + 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: admin_get_moderation_instance_policy + 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: admin_update_moderation_instance_policy + 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: admin_partial_update_moderation_instance_policy + 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: admin_delete_moderation_instance_policy + 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: admin_get_moderation_notes + 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: admin_create_moderation_note + 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: admin_get_moderation_note + 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: admin_delete_moderation_note + 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: admin_get_moderation_reports + 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: admin_get_moderation_report + 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: admin_update_moderation_report + 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: admin_partial_update_moderation_report + 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: admin_get_moderation_requests + 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: admin_get_moderation_request + 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: admin_update_moderation_request + 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: admin_partial_update_moderation_request + 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: admin_get_tags + 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: admin_create_tag + 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: admin_get_tag + 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: admin_delete_tag + 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: admin_create_tag_action + 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: admin_get_user_invitations + 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: admin_create_user_invitation + 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: admin_get_user_invitation + 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: admin_update_user_invitation + 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: admin_partial_update_user_invitation + 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: admin_create_user_invitation_action + 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: admin_get_user_users + 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: admin_get_user_user + 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: admin_update_user_user + 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: admin_partial_update_user_user + 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: get_moderation_content_filters + 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: create_moderation_content_filter + 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: get_moderation_content_filter + 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: delete_moderation_content_filter + 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: create_moderation_report + 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: get_mutations + 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: get_mutation + 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: delete_mutation + 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: create_mutation_approve + 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: create_mutation_reject + 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: get_oauth_apps + 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: create_oauth_app + 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: get_oauth_app + 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: update_oauth_app + 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: partial_update_oauth_app + 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: delete_oauth_app + 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: create_oauth_app_refresh_token + 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: get_oauth_authorize + description: 'Handle GET requests: instantiate a blank version of the form.' + tags: + - oauth + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + description: No response body + post: + operationId: create_oauth_authorize + 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: update_oauth_authorize + tags: + - oauth + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + description: No response body + /api/v1/oauth/grants/: + get: + operationId: get_oauth_grants + 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: get_oauth_grant + 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: delete_oauth_grant + 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: get_oembed + tags: + - oembed + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + description: No response body + /api/v1/playlists/: + get: + operationId: get_playlists + 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: create_playlist + 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: get_playlist + 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: update_playlist + 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: partial_update_playlist + 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: delete_playlist + 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: create_playlist_add + 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: delete_playlist_clear + 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: create_playlist_move + 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: create_playlist_remove + 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: delete_playlist_remove + 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: get_playlist_track + 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: get_plugins + 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: create_plugin + tags: + - plugins + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '201': + description: No response body + /api/v1/plugins/{id}/: + get: + operationId: get_plugin + 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: create_plugin_disable + 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: create_plugin_enable + 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: create_plugin_scan + 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: get_radio_radios + 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: create_radio_radio + 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: get_radio_radio + 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: update_radio_radio + 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: partial_update_radio_radio + 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: delete_radio_radio + 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: get_radio_radio_track + 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: get_radio_radio_filter + tags: + - radios + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/Radio' + description: '' + /api/v1/radios/radios/validate/: + post: + operationId: create_radio_radio_validate + 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: create_radio_session + 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: get_radio_session + 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: create_radio_track + 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: get_rate_limit + tags: + - rate-limit + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + content: + application/json: + schema: + $ref: '#/components/schemas/RateLimit' + description: '' + /api/v1/search: + get: + operationId: get_search + tags: + - search + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + description: No response body + /api/v1/stream/{uuid}/: + get: + operationId: get_stream + 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: get_subscriptions + 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: get_subscription + 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: get_subscription_all + 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: get_tags + 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: get_tag + 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: create_text_preview + tags: + - text-preview + security: + - oauth2: [] + - ApplicationToken: [] + responses: + '200': + description: No response body + /api/v1/tracks/: + get: + operationId: get_tracks + 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: get_track + 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: delete_track + 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: get_track_fetches + 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: path + name: id + schema: + type: integer + description: A unique integer value identifying this track. + required: true + - 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/PaginatedFetchList' + description: '' + post: + operationId: create_track_fetch + 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/Fetch' + description: '' + /api/v1/tracks/{id}/libraries/: + get: + operationId: get_track_library + 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: get_track_mutations + 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: path + name: id + schema: + type: integer + description: A unique integer value identifying this track. + required: true + - 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/PaginatedAPIMutationList' + description: '' + post: + operationId: create_track_mutation + 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/APIMutation' + description: '' + /api/v1/uploads/: + get: + operationId: get_uploads + 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: create_upload + 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: get_upload + 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: update_upload + 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: partial_update_upload + 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: delete_upload + 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: get_upload_audio_file_metadatum + 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: create_upload_action + 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: update_user + 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: partial_update_user + 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: get_user_subsonic_token + 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: create_user_subsonic_token + 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: delete_user_subsonic_token + 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: create_user_change_email + 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: get_authenticated_user + 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: delete_authenticated_user + 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: update_settings + 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: update_user_user + 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: partial_update_user_user + 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: get_user_user_subsonic_token + 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: create_user_user_subsonic_token + 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: delete_user_user_subsonic_token + 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: create_user_user_change_email + 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: get_authenticated_user_2 + 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: delete_authenticated_user_2 + 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: update_settings_2 + 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' + PaginatedFetchList: + 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/Fetch' + 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' + PaginatedLibraryList: + 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/Library' + 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