X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=support%2Fdoc%2Fapi%2Fopenapi.yaml;h=39fa3cef51fa20af5044696aeb61ac7f0aa094c1;hb=bfbd912886eba17b4aa9a40dcef2fddc685d85bf;hp=666e48a417d797f406c3d03f3ed7115525441d1c;hpb=8f9e8be1fc46ce1744ed6ff537ce2fb995fe7b58;p=github%2FChocobozzz%2FPeerTube.git diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index 666e48a41..39fa3cef5 100644 --- a/support/doc/api/openapi.yaml +++ b/support/doc/api/openapi.yaml @@ -1,7 +1,7 @@ openapi: 3.0.0 info: title: PeerTube - version: 1.1.0-alpha.2 + version: 1.3.1 contact: name: PeerTube Community url: 'https://joinpeertube.org' @@ -10,27 +10,41 @@ info: url: 'https://github.com/Chocobozzz/PeerTube/blob/master/LICENSE' x-logo: url: 'https://joinpeertube.org/img/brand.png' + altText: PeerTube Project Homepage description: | # Introduction The PeerTube API is built on HTTP(S). Our API is RESTful. It has predictable resource URLs. It returns HTTP response codes to indicate errors. It also accepts and returns JSON in the HTTP body. You can use your favorite HTTP/REST library for your programming language to use PeerTube. No official - SDK is currently provided. + SDK is currently provided, but the spec API is fully compatible with + [openapi-generator](https://github.com/OpenAPITools/openapi-generator/wiki/API-client-generator-HOWTO) + which generates a client SDK in the language of your choice. # Authentication When you sign up for an account, you are given the possibility to generate - sessions, and authenticate using this session token. One session token can + sessions, and authenticate using this session token. One session token can currently be used at a time. + + # Errors + The API uses standard HTTP status codes to indicate the success or failure + of the API call. The body of the response will be JSON in the following + format. + + ``` + { + "code": "unauthorized_request", // example inner error code + "error": "Token is invalid." // example exposed error message + } + ``` +externalDocs: + url: https://docs.joinpeertube.org/api-rest-reference.html tags: - name: Accounts description: > Using some features of PeerTube require authentication, for which Accounts - provide different levels of permission as well as associated user - information. - - Accounts also encompass remote accounts discovered across the federation. + information. Accounts also encompass remote accounts discovered across the federation. - name: Config description: > Each server exposes public information regarding supported videos and @@ -42,23 +56,15 @@ tags: - name: Job description: > Jobs are long-running tasks enqueued and processed by the instance - itself. - - No additional worker registration is currently available. - - name: ServerFollowing + itself. No additional worker registration is currently available. + - name: Server Following description: > Managing servers which the instance interacts with is crucial to the - concept - - of federation in PeerTube and external video indexation. The PeerTube - server - - then deals with inter-server ActivityPub operations and propagates - + concept of federation in PeerTube and external video indexation. The PeerTube + server then deals with inter-server ActivityPub operations and propagates information across its social graph by posting activities to actors' inbox - endpoints. - - name: VideoAbuse + - name: Video Abuse description: | Video abuses deal with reports of local or remote videos alike. - name: Video @@ -70,16 +76,52 @@ tags: Videos from other instances federated by the instance (that is, instances followed by the instance) can be found via keywords and other criteria of the advanced search. - - name: VideoComment + - name: Video Comment description: > Operations dealing with comments to a video. Comments are organized in threads. - - name: VideoChannel + - name: Video Channel description: > Operations dealing with creation, modification and video listing of a - user's - - channels. + user's channels. + - name: Video Blacklist + description: > + Operations dealing with blacklisting videos (removing them from view and + preventing interactions). + - name: Video Rate + description: > + Voting for a video. +x-tagGroups: + - name: Accounts + tags: + - Accounts + - User + - My User + - name: Videos + tags: + - Video + - Video Caption + - Video Channel + - Video Comment + - Video Following + - Video Rate + - name: Moderation + tags: + - Video Abuse + - Video Blacklist + - name: Instance Configuration + tags: + - Config + - Server Following + - name: Notifications + tags: + - Feeds + - name: Jobs + tags: + - Job + - name: Search + tags: + - Search paths: '/accounts/{name}': get: @@ -112,7 +154,7 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/Video' + $ref: '#/components/schemas/VideoListResponse' x-code-samples: - lang: JavaScript source: | @@ -126,6 +168,37 @@ paths: source: | # pip install httpie http -b GET https://peertube2.cpy.re/api/v1/accounts/{name}/videos + - lang: Ruby + source: | + require 'uri' + require 'net/http' + + url = URI("https://peertube2.cpy.re/api/v1/accounts/{name}/videos") + + http = Net::HTTP.new(url.host, url.port) + http.use_ssl = true + http.verify_mode = OpenSSL::SSL::VERIFY_NONE + + request = Net::HTTP::Post.new(url) + request["content-type"] = 'application/json' + response = http.request(request) + puts response.read_body + - lang: Python + source: | + import http.client + + conn = http.client.HTTPSConnection("https://peertube2.cpy.re/api/v1") + + headers = { + 'content-type': "application/json" + } + + conn.request("POST", "/accounts/{name}/videos", None, headers) + + res = conn.getresponse() + data = res.read() + + print(data.decode("utf-8")) /accounts: get: tags: @@ -144,7 +217,7 @@ paths: get: tags: - Config - summary: Get the configuration of the server + summary: Get the public configuration of the server responses: '200': description: successful operation @@ -152,6 +225,45 @@ paths: application/json: schema: $ref: '#/components/schemas/ServerConfig' + /config/about: + get: + summary: Get the instance about page content + tags: + - Config + responses: + '200': + description: successful operation + /config/custom: + get: + summary: Get the runtime configuration of the server + tags: + - Config + security: + - OAuth2: + - admin + responses: + '200': + description: successful operation + put: + summary: Set the runtime configuration of the server + tags: + - Config + security: + - OAuth2: + - admin + responses: + '200': + description: successful operation + delete: + summary: Delete the runtime configuration of the server + tags: + - Config + security: + - OAuth2: + - admin + responses: + '200': + description: successful operation '/feeds/videos.{format}': get: summary: >- @@ -190,7 +302,7 @@ paths: responses: '200': description: successful operation - /jobs: + /jobs/{state}: get: summary: Get list of jobs security: @@ -205,6 +317,12 @@ paths: description: The state of the job schema: type: string + enum: + - active + - completed + - failed + - waiting + - delayed - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - $ref: '#/components/parameters/sort' @@ -223,7 +341,7 @@ paths: - OAuth2: - admin tags: - - ServerFollowing + - Server Following summary: Unfollow a server by hostname parameters: - name: host @@ -238,7 +356,7 @@ paths: /server/followers: get: tags: - - ServerFollowing + - Server Following summary: Get followers of the server parameters: - $ref: '#/components/parameters/start' @@ -256,7 +374,7 @@ paths: /server/following: get: tags: - - ServerFollowing + - Server Following summary: Get servers followed by the server parameters: - $ref: '#/components/parameters/start' @@ -276,7 +394,7 @@ paths: - OAuth2: - admin tags: - - ServerFollowing + - Server Following summary: Follow a server responses: '204': @@ -317,7 +435,7 @@ paths: parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/usersSort' responses: '200': description: successful operation @@ -372,13 +490,28 @@ paths: schema: $ref: '#/components/schemas/UpdateUser' required: true + /users/register: + post: + summary: Register a user + tags: + - User + responses: + '204': + $ref: '#/paths/~1users~1me/put/responses/204' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RegisterUser' + required: true /users/me: get: summary: Get current user information security: - - OAuth2: [] + - OAuth2: + - user tags: - - User + - My User responses: '200': description: successful operation @@ -391,9 +524,10 @@ paths: put: summary: Update current user information security: - - OAuth2: [] + - OAuth2: + - user tags: - - User + - My User responses: '204': description: Successful operation @@ -403,13 +537,33 @@ paths: schema: $ref: '#/components/schemas/UpdateMe' required: true + /users/me/videos/imports: + get: + summary: Get video imports of current user + security: + - OAuth2: + - user + tags: + - My User + parameters: + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/sort' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoImport' /users/me/video-quota-used: get: summary: Get current user used quota security: - - OAuth2: [] + - OAuth2: + - user tags: - - User + - My User responses: '200': description: successful operation @@ -423,7 +577,7 @@ paths: security: - OAuth2: [] tags: - - User + - My User parameters: - name: videoId in: path @@ -442,9 +596,10 @@ paths: get: summary: Get videos of the current user security: - - OAuth2: [] + - OAuth2: + - user tags: - - User + - My User parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -455,30 +610,104 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/Video' - /users/register: + $ref: '#/components/schemas/VideoListResponse' + /users/me/subscriptions: + get: + summary: Get subscriptions of the current user + security: + - OAuth2: + - user + tags: + - My User + parameters: + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/sort' + responses: + '200': + description: successful operation post: - summary: Register a user + summary: Add subscription to the current user + security: + - OAuth2: + - user tags: - - User + - My User responses: - '204': - $ref: '#/paths/~1users~1me/put/responses/204' - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/RegisterUser' - required: true + '200': + description: successful operation + /users/me/subscriptions/exist: + get: + summary: Get if subscriptions exist for the current user + security: + - OAuth2: + - user + tags: + - My User + parameters: + - $ref: '#/components/parameters/subscriptionsUris' + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + /users/me/subscriptions/videos: + get: + summary: Get videos of subscriptions of the current user + security: + - OAuth2: + - user + tags: + - My User + parameters: + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/sort' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoListResponse' + '/users/me/subscriptions/{subscriptionHandle}': + get: + summary: Get subscription of the current user for a given uri + security: + - OAuth2: + - user + tags: + - My User + parameters: + - $ref: '#/components/parameters/subscriptionHandle' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoChannel' + delete: + summary: Delete subscription of the current user for a given uri + security: + - OAuth2: + - user + tags: + - My User + parameters: + - $ref: '#/components/parameters/subscriptionHandle' + responses: + '200': + description: successful operation /users/me/avatar/pick: post: summary: Update current user avatar security: - OAuth2: [] tags: - - User + - My User responses: '200': description: successful operation @@ -506,27 +735,26 @@ paths: tags: - Video parameters: - - name: category - in: query - required: false - description: category id of the video - schema: - type: number + - $ref: '#/components/parameters/categoryOneOf' + - $ref: '#/components/parameters/tagsOneOf' + - $ref: '#/components/parameters/tagsAllOf' + - $ref: '#/components/parameters/licenceOneOf' + - $ref: '#/components/parameters/languageOneOf' + - $ref: '#/components/parameters/nsfw' + - $ref: '#/components/parameters/filter' - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/videosSort' responses: '200': description: successful operation content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/Video' + $ref: '#/components/schemas/VideoListResponse' /videos/categories: get: - summary: Get list of video licences known by the server + summary: Get list of video categories known by the server tags: - Video responses: @@ -588,7 +816,7 @@ paths: tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation @@ -633,39 +861,28 @@ paths: description: Video name type: string tags: - description: Video tags - type: string + description: Video tags (maximum 5 tags each between 2 and 30 characters) + type: array + items: + type: string commentsEnabled: description: Enable or disable comments for this video type: string - scheduleUpdate: &ref_0 - type: object - properties: - privacy: - type: string - enum: - - Public - - Unlisted - description: Video privacy target - updateAt: - type: string - format: date - description: When to update the video - required: - - updateAt + scheduleUpdate: + $ref: '#/components/schemas/VideoScheduledUpdate' get: summary: Get a video by its id tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation content: application/json: schema: - $ref: '#/components/schemas/Video' + $ref: '#/components/schemas/VideoDetails' delete: summary: Delete a video by its id security: @@ -673,7 +890,7 @@ paths: tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' @@ -683,7 +900,7 @@ paths: tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation @@ -697,10 +914,87 @@ paths: tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' + responses: + '204': + $ref: '#/paths/~1users~1me/put/responses/204' + '/videos/{id}/watching': + put: + summary: Set watching progress of a video by its id for a user + tags: + - Video + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserWatchingVideo' + required: true + responses: + '204': + $ref: '#/paths/~1users~1me/put/responses/204' + /videos/ownership: + get: + summary: Get list of video ownership changes requests + tags: + - Video + security: + - OAuth2: [] + responses: + '200': + description: successful operation + '/videos/ownership/{id}/accept': + post: + summary: Refuse ownership change request for video by its id + tags: + - Video + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '204': + $ref: '#/paths/~1users~1me/put/responses/204' + '/videos/ownership/{id}/refuse': + post: + summary: Accept ownership change request for video by its id + tags: + - Video + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '204': + $ref: '#/paths/~1users~1me/put/responses/204' + '/videos/{id}/give-ownership': + post: + summary: Request change of ownership for a video you own, by its id + tags: + - Video + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + requestBody: + required: true + content: + application/x-www-form-urlencoded: + schema: + type: object + properties: + username: + type: string + required: + - username responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' + '400': + description: 'Changing video ownership to a remote account is not supported yet' /videos/upload: post: summary: Upload a video file with its metadata @@ -735,7 +1029,7 @@ paths: description: Video preview file type: string privacy: - $ref: '#/components/schemas/VideoPrivacy' + $ref: '#/components/schemas/VideoPrivacySet' category: description: Video category type: string @@ -762,16 +1056,18 @@ paths: type: string tags: description: Video tags - type: string + type: array + items: + type: string commentsEnabled: description: Enable or disable comments for this video type: string - scheduleUpdate: *ref_0 + scheduleUpdate: + $ref: '#/components/schemas/VideoScheduledUpdate' required: - videofile - channelId - name - - privacy x-code-samples: - lang: Shell source: | @@ -781,7 +1077,6 @@ paths: PASSWORD="" FILE_PATH="" CHANNEL_ID="" - PRIVACY="1" # public: 1, unlisted: 2, private: 3 NAME="" API_PATH="https://peertube2.cpy.re/api/v1" @@ -798,19 +1093,96 @@ paths: videofile@$FILE_PATH \ channelId=$CHANNEL_ID \ name=$NAME \ - privacy=$PRIVACY \ "Authorization:Bearer $token" - /videos/abuse: - get: - summary: Get list of reported video abuses + /videos/imports: + post: + summary: Import a torrent or magnetURI or HTTP ressource (if enabled by the instance administrator) security: - OAuth2: [] tags: - - VideoAbuse + - Video + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoUploadResponse' + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + torrentfile: + description: Torrent File + type: string + format: binary + targetUrl: + description: HTTP target URL + type: string + magnetUri: + description: Magnet URI + type: string + channelId: + description: Channel id that will contain this video + type: number + thumbnailfile: + description: Video thumbnail file + type: string + previewfile: + description: Video preview file + type: string + privacy: + $ref: '#/components/schemas/VideoPrivacySet' + category: + description: Video category + type: string + licence: + description: Video licence + type: string + language: + description: Video language + type: string + description: + description: Video description + type: string + waitTranscoding: + description: Whether or not we wait transcoding before publish the video + type: string + support: + description: Text describing how to support the video uploader + type: string + nsfw: + description: Whether or not this video contains sensitive content + type: string + name: + description: Video name + type: string + tags: + description: Video tags + type: array + items: + type: string + commentsEnabled: + description: Enable or disable comments for this video + type: string + scheduleUpdate: + $ref: '#/components/schemas/VideoScheduledUpdate' + required: + - channelId + - name + /videos/abuse: + get: + summary: Get list of reported video abuses + security: + - OAuth2: [] + tags: + - Video Abuse parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/abusesSort' responses: '200': description: successful operation @@ -826,9 +1198,9 @@ paths: security: - OAuth2: [] tags: - - VideoAbuse + - Video Abuse parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' @@ -840,9 +1212,9 @@ paths: - admin - moderator tags: - - VideoBlacklist + - Video Blacklist parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' @@ -853,9 +1225,9 @@ paths: - admin - moderator tags: - - VideoBlacklist + - Video Blacklist parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' @@ -867,11 +1239,11 @@ paths: - admin - moderator tags: - - VideoBlacklist + - Video Blacklist parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/blacklistsSort' responses: '200': description: successful operation @@ -881,11 +1253,63 @@ paths: type: array items: $ref: '#/components/schemas/VideoBlacklist' + /videos/{id}/captions: + get: + summary: Get list of video's captions + tags: + - Video Caption + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + properties: + total: + type: integer + data: + type: array + items: + $ref: '#/components/schemas/VideoCaption' + /videos/{id}/captions/{captionLanguage}: + put: + summary: Add or replace a video caption + tags: + - Video Caption + parameters: + - $ref: '#/components/parameters/idOrUUID' + - $ref: '#/components/parameters/captionLanguage' + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + captionfile: + description: The file to upload. + type: string + format: binary + responses: + '204': + $ref: '#/paths/~1users~1me/put/responses/204' + delete: + summary: Delete a video caption + tags: + - Video Caption + parameters: + - $ref: '#/components/parameters/idOrUUID' + - $ref: '#/components/parameters/captionLanguage' + responses: + '204': + $ref: '#/paths/~1users~1me/put/responses/204' /video-channels: get: summary: Get list of video channels tags: - - VideoChannel + - Video Channel parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -904,19 +1328,22 @@ paths: security: - OAuth2: [] tags: - - VideoChannel + - Video Channel responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' requestBody: - $ref: '#/components/requestBodies/VideoChannelInput' - '/video-channels/{id}': + content: + application/json: + schema: + $ref: '#/components/schemas/VideoChannelCreate' + '/video-channels/{channelHandle}': get: summary: Get a video channel by its id tags: - - VideoChannel + - Video Channel parameters: - - $ref: '#/components/parameters/id3' + - $ref: '#/components/parameters/channelHandle' responses: '200': description: successful operation @@ -929,44 +1356,48 @@ paths: security: - OAuth2: [] tags: - - VideoChannel + - Video Channel parameters: - - $ref: '#/components/parameters/id3' + - $ref: '#/components/parameters/channelHandle' responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' requestBody: - $ref: '#/components/requestBodies/VideoChannelInput' + content: + application/json: + schema: + $ref: '#/components/schemas/VideoChannelUpdate' delete: summary: Delete a video channel by its id security: - OAuth2: [] tags: - - VideoChannel + - Video Channel parameters: - - $ref: '#/components/parameters/id3' + - $ref: '#/components/parameters/channelHandle' responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' - '/video-channels/{id}/videos': + '/video-channels/{channelHandle}/videos': get: summary: Get videos of a video channel by its id tags: - - VideoChannel + - Video + - Video Channel parameters: - - $ref: '#/components/parameters/id3' + - $ref: '#/components/parameters/channelHandle' responses: '200': description: successful operation content: application/json: schema: - $ref: '#/components/schemas/Video' + $ref: '#/components/schemas/VideoListResponse' '/accounts/{name}/video-channels': get: summary: Get video channels of an account by its name tags: - - VideoChannel + - Video Channel parameters: - $ref: '#/components/parameters/name' responses: @@ -978,13 +1409,43 @@ paths: type: array items: $ref: '#/components/schemas/VideoChannel' + '/accounts/{name}/ratings': + get: + summary: Get ratings of an account by its name + security: + - OAuth2: [] + tags: + - User + parameters: + - $ref: '#/components/parameters/name' + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/sort' + - name: rating + in: query + required: false + description: Optionaly filter which ratings to retrieve + schema: + type: string + enum: + - like + - dislike + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/VideoRating' '/videos/{id}/comment-threads': get: summary: Get the comment threads of a video by its id tags: - - VideoComment + - Video Comment parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - $ref: '#/components/parameters/sort' @@ -1000,9 +1461,9 @@ paths: security: - OAuth2: [] tags: - - VideoComment + - Video Comment parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation @@ -1014,15 +1475,10 @@ paths: get: summary: 'Get the comment thread by its id, of a video by its id' tags: - - VideoComment + - Video Comment parameters: - - $ref: '#/components/parameters/id2' - - name: threadId - in: path - required: true - description: The thread id (root comment id) - schema: - type: number + - $ref: '#/components/parameters/idOrUUID' + - $ref: '#/components/parameters/threadId' responses: '200': description: successful operation @@ -1036,9 +1492,9 @@ paths: security: - OAuth2: [] tags: - - VideoComment + - Video Comment parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/commentId' responses: '200': @@ -1048,13 +1504,13 @@ paths: schema: $ref: '#/components/schemas/CommentThreadPostResponse' delete: - summary: 'Delete a comment in a comment therad by its id, of a video by its id' + summary: 'Delete a comment in a comment thread by its id, of a video by its id' security: - OAuth2: [] tags: - - VideoComment + - Video Comment parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/commentId' responses: '204': @@ -1065,9 +1521,9 @@ paths: security: - OAuth2: [] tags: - - VideoRate + - Video Rate parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': $ref: '#/paths/~1users~1me/put/responses/204' @@ -1079,7 +1535,7 @@ paths: parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/videosSearchSort' - name: search in: query required: true @@ -1092,12 +1548,14 @@ paths: content: application/json: schema: - type: array - items: - $ref: '#/components/schemas/Video' + $ref: '#/components/schemas/VideoListResponse' servers: + - url: 'https://peertube.cpy.re/api/v1' + description: Live Test Server (live data - stable version) - url: 'https://peertube2.cpy.re/api/v1' - description: Live Server + description: Live Test Server (live data - bleeding edge version) + - url: 'https://peertube3.cpy.re/api/v1' + description: Live Test Server (live data - bleeding edge version) components: parameters: start: @@ -1121,6 +1579,74 @@ components: description: Sort column (-createdAt for example) schema: type: string + videosSort: + name: sort + in: query + required: false + description: Sort videos by criteria + schema: + type: string + enum: + - -name + - -duration + - -createdAt + - -publishedAt + - -views + - -likes + - -trending + videosSearchSort: + name: sort + in: query + required: false + description: Sort videos by criteria + schema: + type: string + enum: + - -name + - -duration + - -createdAt + - -publishedAt + - -views + - -likes + - -match + blacklistsSort: + name: sort + in: query + required: false + description: Sort blacklists by criteria + schema: + type: string + enum: + - -id + - -name + - -duration + - -views + - -likes + - -dislikes + - -uuid + - -createdAt + usersSort: + name: sort + in: query + required: false + description: Sort users by criteria + schema: + type: string + enum: + - -id + - -username + - -createdAt + abusesSort: + name: sort + in: query + required: false + description: Sort abuses by criteria + schema: + type: string + enum: + - -id + - -createdAt + - -state name: name: name in: path @@ -1137,33 +1663,145 @@ components: description: The user id schema: type: number - id2: + idOrUUID: name: id in: path required: true description: The video id or uuid schema: type: string - id3: - name: id + captionLanguage: + name: captionLanguage in: path required: true - description: The video channel id or uuid + description: The caption language schema: type: string - commentId: + channelHandle: + name: channelHandle + in: path + required: true + description: "The video channel handle (example: 'my_username@example.com' or 'my_username')" + schema: + type: string + subscriptionHandle: + name: subscriptionHandle + in: path + required: true + description: "The subscription handle (example: 'my_username@example.com' or 'my_username')" + schema: + type: string + threadId: name: threadId in: path required: true + description: The thread id (root comment id) + schema: + type: number + commentId: + name: commentId + in: path + required: true description: The comment id schema: type: number - requestBodies: - VideoChannelInput: - content: - application/json: - schema: - $ref: '#/components/schemas/VideoChannelInput' + categoryOneOf: + name: categoryOneOf + in: query + required: false + description: category id of the video + schema: + oneOf: + - type: number + - type: array + items: + type: number + style: form + explode: false + tagsOneOf: + name: tagsOneOf + in: query + required: false + description: tag(s) of the video + schema: + oneOf: + - type: string + - type: array + items: + type: string + style: form + explode: false + tagsAllOf: + name: tagsAllOf + in: query + required: false + description: tag(s) of the video, where all should be present in the video + schema: + oneOf: + - type: string + - type: array + items: + type: string + style: form + explode: false + languageOneOf: + name: languageOneOf + in: query + required: false + description: language id of the video + schema: + oneOf: + - type: string + - type: array + items: + type: string + style: form + explode: false + licenceOneOf: + name: licenceOneOf + in: query + required: false + description: licence id of the video + schema: + oneOf: + - type: number + - type: array + items: + type: number + style: form + explode: false + nsfw: + name: nsfw + in: query + required: false + description: whether to include nsfw videos, if any + schema: + type: string + enum: + - 'true' + - 'false' + filter: + name: filter + in: query + required: false + description: > + Special filters (local for instance) which might require special rights: + * `local` - only videos local to the instance + * `all-local` - only videos local to the instance, but showing private and unlisted videos (requires Admin privileges) + schema: + type: string + enum: + - local + - all-local + subscriptionsUris: + name: uris + in: query + required: true + description: list of uris to check if each is part of the user subscriptions + schema: + type: array + items: + type: string securitySchemes: OAuth2: description: > @@ -1175,7 +1813,7 @@ components: - Have an account with sufficient authorization levels - - [Generate](https://docs.joinpeertube.org/lang/en/devdocs/rest.html) a + - [Generate](https://docs.joinpeertube.org/#/api-rest-getting-started) a Bearer Token - Make Authenticated Requests @@ -1200,12 +1838,132 @@ components: type: string label: type: string - VideoPrivacy: - type: string + VideoPrivacySet: + type: integer enum: - - Public - - Unlisted - - Private + - 1 + - 2 + - 3 + description: 'The video privacy (Public = 1, Unlisted = 2, Private = 3)' + VideoPrivacyConstant: + properties: + id: + type: integer + enum: + - 1 + - 2 + - 3 + label: + type: string + VideoStateConstant: + properties: + id: + type: integer + enum: + - 1 + - 2 + - 3 + description: 'The video state (Published = 1, to transcode = 2, to import = 3)' + label: + type: string + VideoResolutionConstant: + properties: + id: + type: integer + description: 'Video resolution (240, 360, 720 ...)' + label: + type: string + VideoScheduledUpdate: + properties: + privacy: + $ref: '#/components/schemas/VideoPrivacySet' + description: Video privacy target + updateAt: + type: string + format: date + description: When to update the video + required: + - updateAt + VideoAccountSummary: + properties: + id: + type: number + name: + type: string + displayName: + type: string + url: + type: string + host: + type: string + avatar: + nullable: true + $ref: '#/components/schemas/Avatar' + VideoChannelSummary: + properties: + id: + type: number + name: + type: string + displayName: + type: string + url: + type: string + host: + type: string + avatar: + nullable: true + $ref: '#/components/schemas/Avatar' + PlaylistElement: + properties: + position: + type: number + startTimestamp: + type: number + stopTimestamp: + type: number + video: + nullable: true + $ref: '#/components/schemas/Video' + VideoFile: + properties: + magnetUri: + type: string + resolution: + $ref: '#/components/schemas/VideoResolutionConstant' + size: + type: number + description: 'Video file size in bytes' + torrentUrl: + type: string + torrentDownaloadUrl: + type: string + fileUrl: + type: string + fileDownloadUrl: + type: string + fps: + type: number + VideoStreamingPlaylists: + properties: + id: + type: number + type: + type: number + enum: + - 1 + description: 'Playlist type (HLS = 1)' + playlistUrl: + type: string + segmentsSha256Url: + type: string + redundancies: + type: array + items: + type: object + properties: + baseUrl: + type: string Video: properties: id: @@ -1218,6 +1976,8 @@ components: type: string updatedAt: type: string + originallyPublishedAt: + type: string category: $ref: '#/components/schemas/VideoConstantNumber' licence: @@ -1225,7 +1985,7 @@ components: language: $ref: '#/components/schemas/VideoConstantString' privacy: - $ref: '#/components/schemas/VideoPrivacy' + $ref: '#/components/schemas/VideoPrivacyConstant' description: type: string duration: @@ -1248,19 +2008,99 @@ components: type: number nsfw: type: boolean + waitTranscoding: + type: boolean + nullable: true + state: + $ref: '#/components/schemas/VideoStateConstant' + scheduledUpdate: + nullable: true + $ref: '#/components/schemas/VideoScheduledUpdate' + blacklisted: + nullable: true + type: boolean + blacklistedReason: + nullable: true + type: string account: + $ref: '#/components/schemas/VideoAccountSummary' + channel: + $ref: '#/components/schemas/VideoChannelSummary' + userHistory: + nullable: true type: object properties: - name: - type: string - displayName: + currentTime: + type: number + VideoDetails: + allOf: + - $ref: '#/components/schemas/Video' + - type: object + properties: + descriptionPath: type: string - url: + support: type: string - host: + channel: + $ref: '#/components/schemas/VideoChannel' + account: + $ref: '#/components/schemas/Account' + tags: + type: array + items: + type: string + files: + type: array + items: + $ref: '#/components/schemas/VideoFile' + commentsEnabled: + type: boolean + downloadEnabled: + type: boolean + trackerUrls: + type: array + items: + type: string + streamingPlaylists: + type: array + items: + $ref: '#/components/schemas/VideoStreamingPlaylists' + VideoImportStateConstant: + properties: + id: + type: integer + enum: + - 1 + - 2 + - 3 + description: 'The video import state (Pending = 1, Success = 2, Failed = 3)' + label: + type: string + VideoImport: + properties: + id: + type: number + targetUrl: + type: string + magnetUri: + type: string + torrentName: + type: string + state: + type: object + properties: + id: + $ref: '#/components/schemas/VideoImportStateConstant' + label: type: string - avatar: - $ref: '#/components/schemas/Avatar' + error: + type: string + createdAt: + type: string + updatedAt: + type: string + video: + $ref: '#/components/schemas/Video' VideoAbuse: properties: id: @@ -1353,6 +2193,12 @@ components: type: array items: $ref: '#/components/schemas/VideoCommentThreadTree' + VideoCaption: + properties: + language: + $ref: '#/components/schemas/VideoConstantString' + captionPath: + type: string Avatar: properties: path: @@ -1402,6 +2248,13 @@ components: autoPlayVideo: type: boolean role: + type: integer + enum: + - 0 + - 1 + - 2 + description: 'The user role (Admin = 0, Moderator = 1, User = 2)' + roleLabel: type: string enum: - User @@ -1409,6 +2262,8 @@ components: - Administrator videoQuota: type: number + videoQuotaDaily: + type: number createdAt: type: string account: @@ -1417,6 +2272,10 @@ components: type: array items: $ref: '#/components/schemas/VideoChannel' + UserWatchingVideo: + properties: + currentTime: + type: number ServerConfig: properties: signup: @@ -1526,6 +2385,14 @@ components: properties: comment: $ref: '#/components/schemas/VideoComment' + VideoListResponse: + properties: + total: + type: number + data: + type: array + items: + $ref: '#/components/schemas/Video' AddUser: properties: username: @@ -1540,14 +2407,22 @@ components: videoQuota: type: string description: 'The user videoQuota ' - role: + videoQuotaDaily: type: string - description: 'The user role ' + description: 'The user daily video quota ' + role: + type: integer + enum: + - 0 + - 1 + - 2 + description: 'The user role (Admin = 0, Moderator = 1, User = 2)' required: - username - password - email - videoQuota + - videoQuotaDaily - role UpdateUser: properties: @@ -1560,13 +2435,21 @@ components: videoQuota: type: string description: 'The updated videoQuota of the user ' - role: + videoQuotaDaily: type: string - description: 'The updated role of the user ' + description: 'The updated daily video quota of the user ' + role: + type: integer + enum: + - 0 + - 1 + - 2 + description: 'The user role (Admin = 0, Moderator = 1, User = 2)' required: - id - email - videoQuota + - videoQuotaDaily - role UpdateMe: properties: @@ -1598,6 +2481,16 @@ components: required: - id - rating + VideoRating: + properties: + video: + $ref: '#/components/schemas/Video' + rating: + type: number + description: 'Rating of the video' + required: + - video + - rating RegisterUser: properties: username: @@ -1609,14 +2502,45 @@ components: email: type: string description: 'The email of the user ' + displayName: + type: string + description: 'The user display name' + channel: + type: object + properties: + name: + type: string + description: 'The default channel name' + displayName: + type: string + description: 'The default channel display name' + required: - username - password - email - VideoChannelInput: + VideoChannelCreate: properties: name: type: string + displayName: + type: string description: type: string + support: + type: string + required: + - name + - displayName + VideoChannelUpdate: + properties: + displayName: + type: string + description: + type: string + support: + type: string + bulkVideosSupportUpdate: + type: boolean + description: 'Update all videos support field of this channel'