From cbbf6c2c405f7f0a14f686b84e06ed6b5b5b2acc Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 13:57:09 +0000 Subject: [PATCH 01/12] Fix env spectacular command in gitpod terminal --- .gitpod.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitpod.yml b/.gitpod.yml index e8aaf4e4d..e27625a4c 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -45,6 +45,7 @@ tasks: COMPOSE_FILE: /workspace/funkwhale/.gitpod/docker-compose.yml ENV_FILE: /workspace/funkwhale/.gitpod/.env VUE_EDITOR: code + DJANGO_SETTINGS_MODULE: config.settings.local command: | clear echo "" -- GitLab From 68face201b67742bbe0b6995fd17ed72259a7f49 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 13:57:22 +0000 Subject: [PATCH 02/12] 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 -- GitLab From 7b0cffba6ae3163bf90ce1e42e291bc75ec325c7 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 14:01:00 +0000 Subject: [PATCH 03/12] Add changelog snippet --- .../changelog.d/rename_operation_id_for_api_client.enhancement | 1 + 1 file changed, 1 insertion(+) create mode 100644 changes/changelog.d/rename_operation_id_for_api_client.enhancement diff --git a/changes/changelog.d/rename_operation_id_for_api_client.enhancement b/changes/changelog.d/rename_operation_id_for_api_client.enhancement new file mode 100644 index 000000000..9ddb886c9 --- /dev/null +++ b/changes/changelog.d/rename_operation_id_for_api_client.enhancement @@ -0,0 +1 @@ +Rename OpenAPI schema's operation ids for nicer API client method names. -- GitLab From c0b2c8d41ea9046a967330ff90bb2b3c4ff4fe24 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 15:02:21 +0000 Subject: [PATCH 04/12] Fix black linting --- api/funkwhale_api/activity/views.py | 2 +- api/funkwhale_api/audio/views.py | 10 ++--- api/funkwhale_api/common/decorators.py | 8 +++- api/funkwhale_api/common/views.py | 10 ++--- api/funkwhale_api/favorites/views.py | 6 +-- api/funkwhale_api/federation/api_views.py | 14 +++---- api/funkwhale_api/federation/decorators.py | 6 ++- api/funkwhale_api/instance/views.py | 4 +- api/funkwhale_api/manage/views.py | 14 +++---- api/funkwhale_api/music/views.py | 18 +++++---- api/funkwhale_api/playlists/views.py | 4 +- api/funkwhale_api/radios/views.py | 4 +- api/funkwhale_api/schema.py | 43 ++++++++++++---------- api/funkwhale_api/users/oauth/views.py | 2 +- api/funkwhale_api/users/views.py | 26 ++++++------- 15 files changed, 92 insertions(+), 79 deletions(-) diff --git a/api/funkwhale_api/activity/views.py b/api/funkwhale_api/activity/views.py index d75a94cb9..15524c8f1 100644 --- a/api/funkwhale_api/activity/views.py +++ b/api/funkwhale_api/activity/views.py @@ -15,7 +15,7 @@ class ActivityViewSet(viewsets.GenericViewSet): permission_classes = [ConditionalAuthentication] queryset = TrackFavorite.objects.none() - @extend_schema(operation_id='get_activity') + @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 83c34c648..8989ed9b3 100644 --- a/api/funkwhale_api/audio/views.py +++ b/api/funkwhale_api/audio/views.py @@ -46,10 +46,10 @@ class ChannelsMixin(object): @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'), + 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, @@ -330,7 +330,7 @@ class SubscriptionsViewSet( qs = super().get_queryset() return qs.filter(actor=self.request.user.actor) - @extend_schema(operation_id='get_all_subscriptions') + @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 f30587a98..b2a298d3f 100644 --- a/api/funkwhale_api/common/decorators.py +++ b/api/funkwhale_api/common/decorators.py @@ -89,8 +89,12 @@ def mutations_route(types): ) return response.Response(serializer.data, status=status.HTTP_201_CREATED) - return extend_schema(methods=['post'], responses=serializers.APIMutationSerializer())( - extend_schema(methods=['get'], responses=serializers.APIMutationSerializer(many=True))( + 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 f122b8b32..a19927599 100644 --- a/api/funkwhale_api/common/views.py +++ b/api/funkwhale_api/common/views.py @@ -80,7 +80,7 @@ class MutationViewSet( return super().perform_destroy(instance) - @extend_schema(operation_id='approve_mutation') + @extend_schema(operation_id="approve_mutation") @action(detail=True, methods=["post"]) @transaction.atomic def approve(self, request, *args, **kwargs): @@ -110,7 +110,7 @@ class MutationViewSet( ) return response.Response({}, status=200) - @extend_schema(operation_id='reject_mutation') + @extend_schema(operation_id="reject_mutation") @action(detail=True, methods=["post"]) @transaction.atomic def reject(self, request, *args, **kwargs): @@ -205,7 +205,7 @@ class AttachmentViewSet( class TextPreviewView(views.APIView): permission_classes = [] - @extend_schema(operation_id='preview_text') + @extend_schema(operation_id="preview_text") def post(self, request, *args, **kwargs): payload = request.data if "text" not in payload: @@ -278,7 +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') + @extend_schema(operation_id="enable_plugin") @action(detail=True, methods=["post"]) def enable(self, request, *args, **kwargs): user = request.user @@ -287,7 +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') + @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 5926ca52d..f8a6d7cd1 100644 --- a/api/funkwhale_api/favorites/views.py +++ b/api/funkwhale_api/favorites/views.py @@ -40,7 +40,7 @@ class TrackFavoriteViewSet( return serializers.UserTrackFavoriteSerializer return serializers.UserTrackFavoriteWriteSerializer - @extend_schema(operation_id='favorite_track') + @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) @@ -70,7 +70,7 @@ class TrackFavoriteViewSet( favorite = models.TrackFavorite.add(track=track, user=self.request.user) return favorite - @extend_schema(operation_id='unfavorite_track') + @extend_schema(operation_id="unfavorite_track") @action(methods=["delete", "post"], detail=False) def remove(self, request, *args, **kwargs): try: @@ -81,7 +81,7 @@ class TrackFavoriteViewSet( favorite.delete() return Response([], status=status.HTTP_204_NO_CONTENT) - @extend_schema(operation_id='get_all_favorite_tracks') + @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 074941253..13cb20207 100644 --- a/api/funkwhale_api/federation/api_views.py +++ b/api/funkwhale_api/federation/api_views.py @@ -41,12 +41,12 @@ def update_follow(follow, approved): @extend_schema_view( - list=extend_schema(operation_id='get_federation_library_follows'), - create=extend_schema(operation_id='create_federation_library_follow'), + 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']) +@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, @@ -86,7 +86,7 @@ class LibraryFollowViewSet( context["actor"] = self.request.user.actor return context - @extend_schema(operation_id='accept_federation_library_follow') + @extend_schema(operation_id="accept_federation_library_follow") @decorators.action(methods=["post"], detail=True) def accept(self, request, *args, **kwargs): try: @@ -98,7 +98,7 @@ class LibraryFollowViewSet( update_follow(follow, approved=True) return response.Response(status=204) - @extend_schema(operation_id='reject_federation_library_follow') + @extend_schema(operation_id="reject_federation_library_follow") @decorators.action(methods=["post"], detail=True) def reject(self, request, *args, **kwargs): try: @@ -111,7 +111,7 @@ class LibraryFollowViewSet( update_follow(follow, approved=False) return response.Response(status=204) - @extend_schema(operation_id='get_all_federation_library_follows') + @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 04052417a..8cb35430f 100644 --- a/api/funkwhale_api/federation/decorators.py +++ b/api/funkwhale_api/federation/decorators.py @@ -44,8 +44,10 @@ def fetches_route(): serializer = api_serializers.FetchSerializer(fetch) return response.Response(serializer.data, status=status.HTTP_201_CREATED) - return extend_schema(methods=['post'], responses=api_serializers.FetchSerializer())( - extend_schema(methods=['get'], responses=api_serializers.FetchSerializer(many=True))( + 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, diff --git a/api/funkwhale_api/instance/views.py b/api/funkwhale_api/instance/views.py index fe2441e00..7eb34135d 100644 --- a/api/funkwhale_api/instance/views.py +++ b/api/funkwhale_api/instance/views.py @@ -53,7 +53,7 @@ class InstanceSettings(generics.GenericAPIView): ] return api_preferences - @extend_schema(operation_id='get_instance_settings') + @extend_schema(operation_id="get_instance_settings") def get(self, request): queryset = self.get_queryset() data = GlobalPreferenceSerializer(queryset, many=True).data @@ -122,7 +122,7 @@ class SpaManifest(views.APIView): permission_classes = [] authentication_classes = [] - @extend_schema(operation_id='get_spa_manifest') + @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 83c822542..292ac1fa1 100644 --- a/api/funkwhale_api/manage/views.py +++ b/api/funkwhale_api/manage/views.py @@ -95,7 +95,7 @@ class ManageArtistViewSet( required_scope = "instance:libraries" ordering_fields = ["creation_date", "name"] - @extend_schema(operation_id='admin_get_library_artist_stats') + @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() @@ -138,7 +138,7 @@ class ManageAlbumViewSet( required_scope = "instance:libraries" ordering_fields = ["creation_date", "title", "release_date"] - @extend_schema(operation_id='admin_get_library_album_stats') + @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() @@ -200,7 +200,7 @@ class ManageTrackViewSet( "disc_number", ] - @extend_schema(operation_id='admin_get_track_stats') + @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() @@ -262,7 +262,7 @@ class ManageLibraryViewSet( filterset_class = filters.ManageLibraryFilterSet required_scope = "instance:libraries" - @extend_schema(operation_id='admin_get_library_stats') + @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() @@ -430,7 +430,7 @@ class ManageDomainViewSet( domain.refresh_from_db() return response.Response(domain.nodeinfo, status=200) - @extend_schema(operation_id='admin_get_federation_domain_stats') + @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() @@ -475,7 +475,7 @@ class ManageActorViewSet( return obj - @extend_schema(operation_id='admin_get_account_stats') + @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() @@ -717,7 +717,7 @@ class ManageChannelViewSet( required_scope = "instance:libraries" ordering_fields = ["creation_date", "name"] - @extend_schema(operation_id='admin_get_channel_stats') + @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 fa78698b0..5804f6997 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -68,9 +68,9 @@ def get_libraries(filter_uploads): serializer = federation_api_serializers.LibrarySerializer(qs, many=True) return Response(serializer.data) - return extend_schema(responses=federation_api_serializers.LibrarySerializer(many=True))( - action(methods=["get"], detail=True)(libraries) - ) + return extend_schema( + responses=federation_api_serializers.LibrarySerializer(many=True) + )(action(methods=["get"], detail=True)(libraries)) def refetch_obj(obj, queryset): @@ -171,9 +171,11 @@ class ArtistViewSet( Prefetch("albums", queryset=albums), TAG_PREFETCH ) - libraries = get_libraries(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( @@ -740,7 +742,7 @@ class UploadViewSet( qs = qs.playable_by(actor) return qs - @extend_schema(operation_id='get_upload_metadata') + @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() @@ -799,7 +801,7 @@ class Search(views.APIView): required_scope = "libraries" anonymous_policy = "setting" - @extend_schema(operation_id='get_search_results') + @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 de4a2e633..e2ebd59ab 100644 --- a/api/funkwhale_api/playlists/views.py +++ b/api/funkwhale_api/playlists/views.py @@ -52,7 +52,9 @@ class PlaylistViewSet( data = {"count": len(plts), "results": serializer.data} return Response(data, status=200) - @extend_schema(operation_id="add_to_playlist", request=serializers.PlaylistAddManySerializer) + @extend_schema( + operation_id="add_to_playlist", request=serializers.PlaylistAddManySerializer + ) @action(methods=["post"], detail=True) @transaction.atomic def add(self, request, *args, **kwargs): diff --git a/api/funkwhale_api/radios/views.py b/api/funkwhale_api/radios/views.py index 51241cc61..1d3098d59 100644 --- a/api/funkwhale_api/radios/views.py +++ b/api/funkwhale_api/radios/views.py @@ -66,7 +66,7 @@ class RadioViewSet( ) return Response(serializer.data) - @extend_schema(operation_id='validate_radio') + @extend_schema(operation_id="validate_radio") @action(methods=["post"], detail=False) def validate(self, request, *args, **kwargs): try: @@ -128,7 +128,7 @@ class RadioSessionTrackViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet) queryset = models.RadioSessionTrack.objects.all() permission_classes = [] - @extend_schema(operation_id='get_next_radio_track') + @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 index 0ba5920fe..b7ceb9c61 100644 --- a/api/funkwhale_api/schema.py +++ b/api/funkwhale_api/schema.py @@ -7,16 +7,15 @@ import re class CustomAutoSchema(AutoSchema): method_mapping = { - 'get': 'get', - 'post': 'create', - 'put': 'update', - 'patch': 'partial_update', - 'delete': 'delete', + "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 @@ -24,46 +23,50 @@ class CustomAutoSchema(AutoSchema): 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] + 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') + tokenized_path.append("root") model = tokenized_path.pop() - if self.method == 'GET' and self._is_list_view(): - action = 'get' + 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') + 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': + 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': + 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': + 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': + 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': + elif len(tokenized_path) > 0 and tokenized_path[0] == "moderation": tokenized_path.pop(0) - return '_'.join(['moderation', action] + tokenized_path + [model]) + return "_".join(["moderation", action] + tokenized_path + [model]) - return '_'.join(['admin', action] + tokenized_path + [model]) + return "_".join(["admin", action] + tokenized_path + [model]) - return '_'.join([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 ee8cbb3f2..d4d640650 100644 --- a/api/funkwhale_api/users/oauth/views.py +++ b/api/funkwhale_api/users/oauth/views.py @@ -86,7 +86,7 @@ class ApplicationViewSet( qs = qs.filter(user=self.request.user) return qs - @extend_schema(operation_id='refresh_oauth_token') + @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 1d65a092d..a780e8d7d 100644 --- a/api/funkwhale_api/users/views.py +++ b/api/funkwhale_api/users/views.py @@ -21,7 +21,7 @@ from funkwhale_api.common import throttling from . import models, serializers, tasks -@extend_schema(operation_id='register', methods=['post']) +@extend_schema(operation_id="register", methods=["post"]) class RegisterView(registration_views.RegisterView): serializer_class = serializers.RegisterSerializer permission_classes = [] @@ -46,22 +46,22 @@ class RegisterView(registration_views.RegisterView): return user -@extend_schema(operation_id='verify_email') +@extend_schema(operation_id="verify_email") class VerifyEmailView(registration_views.VerifyEmailView): action = "verify-email" -@extend_schema(operation_id='change_password') +@extend_schema(operation_id="change_password") class PasswordChangeView(rest_auth_views.PasswordChangeView): action = "password-change" -@extend_schema(operation_id='reset_password') +@extend_schema(operation_id="reset_password") class PasswordResetView(rest_auth_views.PasswordResetView): action = "password-reset" -@extend_schema(operation_id='confirm_password_reset') +@extend_schema(operation_id="confirm_password_reset") class PasswordResetConfirmView(rest_auth_views.PasswordResetConfirmView): action = "password-reset-confirm" @@ -73,8 +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']) + @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""" @@ -89,7 +89,7 @@ class UserViewSet(mixins.UpdateModelMixin, viewsets.GenericViewSet): serializer = serializers.MeSerializer(request.user) return Response(serializer.data) - @extend_schema(operation_id='update_settings') + @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""" @@ -121,7 +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') + @extend_schema(operation_id="change_email") @action( methods=["post"], required_scope="security", @@ -149,8 +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) +@extend_schema(operation_id="login") +@action(methods=["post"], detail=False) def login(request): throttling.check_request(request, "login") if request.method != "POST": @@ -170,8 +170,8 @@ def login(request): return response -@extend_schema(operation_id='logout') -@action(methods=['post'], detail=False) +@extend_schema(operation_id="logout") +@action(methods=["post"], detail=False) def logout(request): if request.method != "POST": return http.HttpResponse(status=405) -- GitLab From dc27e7dad9a51a400d6c863fa9e465c0443d174d Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 15:06:19 +0000 Subject: [PATCH 05/12] Remove unused import --- api/funkwhale_api/favorites/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/funkwhale_api/favorites/views.py b/api/funkwhale_api/favorites/views.py index f8a6d7cd1..d01a546c9 100644 --- a/api/funkwhale_api/favorites/views.py +++ b/api/funkwhale_api/favorites/views.py @@ -2,7 +2,7 @@ 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 drf_spectacular.utils import extend_schema from django.db.models import Prefetch -- GitLab From ee83555595939fadd53b094fb9f4a717a53a8626 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 15:56:42 +0000 Subject: [PATCH 06/12] Add pluralizer to poetry lockfile --- api/poetry.lock | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/api/poetry.lock b/api/poetry.lock index b1c7d98c2..a1dd842cc 100644 --- a/api/poetry.lock +++ b/api/poetry.lock @@ -1358,6 +1358,14 @@ importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "pluralizer" +version = "1.2.0" +description = "Singularize or pluralize a given word useing a pre-defined list of rules" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "prompt-toolkit" version = "3.0.31" @@ -2182,7 +2190,7 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "1.1" python-versions = "^3.7" -content-hash = "a95a52abbe6891ec4a40bf876b12b69b39eef53e7781247609efa618178ad116" +content-hash = "235c0f30fce9509c81e057fbbd0d32705cffc360027abca2f629e862ed83214c" [metadata.files] aiohttp = [ @@ -3209,6 +3217,10 @@ pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +pluralizer = [ + {file = "pluralizer-1.2.0-py3-none-any.whl", hash = "sha256:d8f92ffa787661d9e704d1e0d8abc6c6c4bbaae9e790d7c709707eafbe17ed12"}, + {file = "pluralizer-1.2.0.tar.gz", hash = "sha256:fe3fb8e1e53fabf372e77d8cbebe04b0f8fc7db853aeff50095dbd5628ac39c5"}, +] prompt-toolkit = [ {file = "prompt_toolkit-3.0.31-py3-none-any.whl", hash = "sha256:9696f386133df0fc8ca5af4895afe5d78f5fcfe5258111c2a79a1c3e41ffa96d"}, {file = "prompt_toolkit-3.0.31.tar.gz", hash = "sha256:9ada952c9d1787f52ff6d5f3484d0b4df8952787c087edf6a1f7c2cb1ea88148"}, -- GitLab From b3e2b84f7e2d141bcdf9d49c56984dc497d1212b Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 16:12:52 +0000 Subject: [PATCH 07/12] Remove operations and schema --- api/operations.json | 594 -- api/schema.yml | 13390 ------------------------------------------ 2 files changed, 13984 deletions(-) delete mode 100644 api/operations.json delete mode 100644 api/schema.yml diff --git a/api/operations.json b/api/operations.json deleted file mode 100644 index edb120fa9..000000000 --- a/api/operations.json +++ /dev/null @@ -1,594 +0,0 @@ -{ - "/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/schema.yml b/api/schema.yml deleted file mode 100644 index a2da38040..000000000 --- a/api/schema.yml +++ /dev/null @@ -1,13390 +0,0 @@ -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 -- GitLab From fce72dbca2e05198c283728aa81b61132215be16 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 16:27:11 +0000 Subject: [PATCH 08/12] Fix `get_radio_radio` --- api/funkwhale_api/schema.py | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/api/funkwhale_api/schema.py b/api/funkwhale_api/schema.py index b7ceb9c61..a0a820ef0 100644 --- a/api/funkwhale_api/schema.py +++ b/api/funkwhale_api/schema.py @@ -32,6 +32,7 @@ class CustomAutoSchema(AutoSchema): tokenized_path.append("root") model = tokenized_path.pop() + model_singular = model if self.method == "GET" and self._is_list_view(): action = "get" @@ -42,10 +43,17 @@ class CustomAutoSchema(AutoSchema): if re.search(r"", self.path_regex): tokenized_path.append("formatted") + # rename `create_radio_radio` to `create_radio`. Works with all models + if ( + len(tokenized_path) > 0 + and model_singular == tokenized_path[0] + ): + tokenized_path.pop(0) + # rename `get_radio_radio_track` to `get_radio_track` if ( len(tokenized_path) > 1 - and tokenized_path[1] == "radio" + and tokenized_path[0] == "radio" and tokenized_path[1] == "radio" ): tokenized_path.pop(0) -- GitLab From 8a620dbab8eb438af20749088def1919e9066a67 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 16:28:59 +0000 Subject: [PATCH 09/12] Fix linting --- api/funkwhale_api/schema.py | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/api/funkwhale_api/schema.py b/api/funkwhale_api/schema.py index a0a820ef0..14f2dc914 100644 --- a/api/funkwhale_api/schema.py +++ b/api/funkwhale_api/schema.py @@ -44,10 +44,7 @@ class CustomAutoSchema(AutoSchema): tokenized_path.append("formatted") # rename `create_radio_radio` to `create_radio`. Works with all models - if ( - len(tokenized_path) > 0 - and model_singular == tokenized_path[0] - ): + if len(tokenized_path) > 0 and model_singular == tokenized_path[0]: tokenized_path.pop(0) # rename `get_radio_radio_track` to `get_radio_track` -- GitLab From bfc8d742b028c2a484c43fb2bf661b9b82fafb64 Mon Sep 17 00:00:00 2001 From: wvffle Date: Sun, 25 Sep 2022 16:31:26 +0000 Subject: [PATCH 10/12] Dynamically fix `get_radio_radio_track` --- api/funkwhale_api/schema.py | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/api/funkwhale_api/schema.py b/api/funkwhale_api/schema.py index 14f2dc914..2f6892f4f 100644 --- a/api/funkwhale_api/schema.py +++ b/api/funkwhale_api/schema.py @@ -47,16 +47,12 @@ class CustomAutoSchema(AutoSchema): if len(tokenized_path) > 0 and model_singular == tokenized_path[0]: tokenized_path.pop(0) - # rename `get_radio_radio_track` to `get_radio_track` - if ( - len(tokenized_path) > 1 - and tokenized_path[0] == "radio" - and tokenized_path[1] == "radio" - ): + # rename `get_radio_radio_track` to `get_radio_track`. Works with all models + if len(tokenized_path) > 1 and tokenized_path[0] == tokenized_path[1]: tokenized_path.pop(0) # rename `get_manage_channel` to `admin_get_channel` - elif len(tokenized_path) > 0 and tokenized_path[0] == "manage": + if len(tokenized_path) > 0 and tokenized_path[0] == "manage": tokenized_path.pop(0) # rename `get_manage_library_album` to `admin_get_album` -- GitLab From 0c9b753ae04764e8952e94a9b16fe2328b2b952d Mon Sep 17 00:00:00 2001 From: wvffle Date: Mon, 26 Sep 2022 18:08:30 +0000 Subject: [PATCH 11/12] Omit coverage of CustomAutoSchema --- api/.coveragerc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/.coveragerc b/api/.coveragerc index 4e3cf2bad..a27c034bb 100644 --- a/api/.coveragerc +++ b/api/.coveragerc @@ -1,5 +1,5 @@ [run] include = funkwhale_api/* -omit = *migrations*, *tests* +omit = *migrations*, *tests*, funkwhale_api/schema.py plugins = django_coverage_plugin -- GitLab From c19b3d3545248bcc2f4738106dbf2711ac9bdecc Mon Sep 17 00:00:00 2001 From: wvffle Date: Mon, 26 Sep 2022 23:52:55 +0000 Subject: [PATCH 12/12] Fix client API generation --- api/funkwhale_api/common/decorators.py | 6 ++++-- api/funkwhale_api/federation/decorators.py | 6 ++++-- api/funkwhale_api/music/views.py | 5 +++-- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/api/funkwhale_api/common/decorators.py b/api/funkwhale_api/common/decorators.py index b2a298d3f..df6a5b470 100644 --- a/api/funkwhale_api/common/decorators.py +++ b/api/funkwhale_api/common/decorators.py @@ -5,7 +5,7 @@ from rest_framework import exceptions from rest_framework import response from rest_framework import status -from drf_spectacular.utils import extend_schema +from drf_spectacular.utils import extend_schema, OpenApiParameter from . import filters from . import models @@ -93,7 +93,9 @@ def mutations_route(types): methods=["post"], responses=serializers.APIMutationSerializer() )( extend_schema( - methods=["get"], responses=serializers.APIMutationSerializer(many=True) + methods=["get"], + responses=serializers.APIMutationSerializer(many=True), + parameters=[OpenApiParameter("id", location="query", exclude=True)], )( decorators.action( methods=["get", "post"], detail=True, required_scope="edits" diff --git a/api/funkwhale_api/federation/decorators.py b/api/funkwhale_api/federation/decorators.py index 8cb35430f..0a3416beb 100644 --- a/api/funkwhale_api/federation/decorators.py +++ b/api/funkwhale_api/federation/decorators.py @@ -5,7 +5,7 @@ from rest_framework import permissions from rest_framework import response from rest_framework import status -from drf_spectacular.utils import extend_schema +from drf_spectacular.utils import extend_schema, OpenApiParameter from funkwhale_api.common import utils as common_utils @@ -46,7 +46,9 @@ def fetches_route(): return extend_schema(methods=["post"], responses=api_serializers.FetchSerializer())( extend_schema( - methods=["get"], responses=api_serializers.FetchSerializer(many=True) + methods=["get"], + responses=api_serializers.FetchSerializer(many=True), + parameters=[OpenApiParameter("id", location="query", exclude=True)], )( decorators.action( methods=["get", "post"], diff --git a/api/funkwhale_api/music/views.py b/api/funkwhale_api/music/views.py index 5804f6997..9b6eb524f 100644 --- a/api/funkwhale_api/music/views.py +++ b/api/funkwhale_api/music/views.py @@ -16,7 +16,7 @@ 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 +from drf_spectacular.utils import extend_schema, OpenApiParameter import requests.exceptions @@ -69,7 +69,8 @@ def get_libraries(filter_uploads): return Response(serializer.data) return extend_schema( - responses=federation_api_serializers.LibrarySerializer(many=True) + responses=federation_api_serializers.LibrarySerializer(many=True), + parameters=[OpenApiParameter("id", location="query", exclude=True)], )(action(methods=["get"], detail=True)(libraries)) -- GitLab