X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=support%2Fdoc%2Fapi%2Fopenapi.yaml;h=9434af9049097b15e9d76156bcde36d69582845a;hb=3cd56a291ceac888c4ac00ea567a820d7f46fab5;hp=a8a064fd0bf6915fc6fd2e9233ba84c2ee5047b2;hpb=53da06304957c7980c759c0db3e93010f4de7db3;p=github%2FChocobozzz%2FPeerTube.git diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index a8a064fd0..9434af904 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.3.0-rc.2 + version: 2.2.0 contact: name: PeerTube Community url: 'https://joinpeertube.org' @@ -13,20 +13,23 @@ info: 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 + + The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite HTTP/REST library for your programming language to use PeerTube. No official 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. + See the [Quick Start guide](https://docs.joinpeertube.org/#/api-rest-getting-started) so you can play with the PeerTube API. + # 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 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. @@ -38,7 +41,7 @@ info: } ``` externalDocs: - url: https://docs.joinpeertube.org/#/api-rest-reference.html + url: https://docs.joinpeertube.org/api-rest-reference.html tags: - name: Accounts description: > @@ -49,22 +52,18 @@ tags: description: > Each server exposes public information regarding supported videos and options. - - name: Feeds - description: | - Feeds of videos and feeds of comments allow to see updates and get them in - an aggregator or script of your choice. - name: Job description: > Jobs are long-running tasks enqueued and processed by the instance itself. No additional worker registration is currently available. - - name: Server Following + - name: Instance Follows 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 information across its social graph by posting activities to actors' inbox endpoints. - - name: Video Abuse + - name: Video Abuses description: | Video abuses deal with reports of local or remote videos alike. - name: Video @@ -72,15 +71,22 @@ tags: Operations dealing with listing, uploading, fetching or modifying videos. - name: Search description: | - The search helps to find _videos_ from within the instance and beyond. + The search helps to find _videos_ or _channels_ from within the instance and beyond. 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: Video Comment + + Administrators can also enable the use of a remote search system, indexing + videos and channels not could be not federated by the instance. + - name: Video Comments description: > Operations dealing with comments to a video. Comments are organized in threads. - - name: Video Channel + - name: Video Playlists + description: > + Operations dealing with playlists of videos. Playlists are bound to users + and/or channels. + - name: Video Channels description: > Operations dealing with creation, modification and video listing of a user's channels. @@ -88,50 +94,48 @@ tags: description: > Operations dealing with blacklisting videos (removing them from view and preventing interactions). - - name: Video Rate + - name: Video Rates description: > - Voting for a video. + Like/dislike a video. x-tagGroups: - name: Accounts tags: - Accounts - - User + - Users + - My User + - My Subscriptions - name: Videos tags: - Video - Video Caption - - Video Channel - - Video Comment + - Video Channels + - Video Comments - Video Following - - Video Rate + - Video Rates + - Video Playlists + - Video Ownership Change + - name: Search + tags: + - Search - name: Moderation tags: - - Video Abuse - - Video Blacklist + - Video Abuses + - Video Blocks - name: Instance Configuration tags: - Config - - Server Following - - name: Notifications - tags: - - Feeds + - Instance Follows - name: Jobs tags: - Job - - name: Search - tags: - - Search paths: '/accounts/{name}': get: tags: - Accounts - summary: Get the account by name + summary: Get an account parameters: - $ref: '#/components/parameters/name' - - $ref: '#/components/parameters/start' - - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' responses: '200': description: successful operation @@ -144,9 +148,20 @@ paths: tags: - Accounts - Video - summary: 'Get videos for an account, provided the name of that account' + summary: 'List videos of an account' parameters: - $ref: '#/components/parameters/name' + - $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/skipCount' + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/videosSort' responses: '200': description: successful operation @@ -169,40 +184,34 @@ paths: http -b GET https://peertube2.cpy.re/api/v1/accounts/{name}/videos - lang: Ruby source: | - require 'uri' require 'net/http' + require 'json' - url = URI("https://peertube2.cpy.re/api/v1/accounts/{name}/videos") + uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos") - http = Net::HTTP.new(url.host, url.port) + http = Net::HTTP.new(uri.host, uri.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 + response = http.get(uri.request_uri) + + puts JSON.parse(response.read_body) - lang: Python source: | - import http.client + import requests - conn = http.client.HTTPSConnection("https://peertube2.cpy.re/api/v1") + r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos") + json = r.json() - headers = { - 'content-type': "application/json" - } - - conn.request("POST", "/accounts/{name}/videos", None, headers) - - res = conn.getresponse() - data = res.read() - - print(data.decode("utf-8")) + print(json) /accounts: get: tags: - Accounts - summary: Get all accounts + summary: List accounts + parameters: + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/sort' responses: '200': description: successful operation @@ -216,7 +225,7 @@ paths: get: tags: - Config - summary: Get the public configuration of the server + summary: Get instance public configuration responses: '200': description: successful operation @@ -226,15 +235,19 @@ paths: $ref: '#/components/schemas/ServerConfig' /config/about: get: - summary: Get the instance about page content + summary: Get instance "About" information tags: - Config responses: '200': description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ServerConfigAbout' /config/custom: get: - summary: Get the runtime configuration of the server + summary: Get instance runtime configuration tags: - Config security: @@ -243,8 +256,12 @@ paths: responses: '200': description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/ServerConfigCustom' put: - summary: Set the runtime configuration of the server + summary: Set instance runtime configuration tags: - Config security: @@ -254,7 +271,7 @@ paths: '200': description: successful operation delete: - summary: Delete the runtime configuration of the server + summary: Delete instance runtime configuration tags: - Config security: @@ -263,47 +280,9 @@ paths: responses: '200': description: successful operation - '/feeds/videos.{format}': - get: - summary: >- - Get the feed of videos for the server, with optional filter by account - name or id - tags: - - Feeds - parameters: - - name: format - in: path - required: true - description: >- - The format expected (xml defaults to RSS 2.0, atom to ATOM 1.0 and - json to JSON FEED 1.0 - schema: - type: string - enum: - - xml - - atom - - json - default: xml - - name: accountId - in: query - required: false - description: >- - The id of the local account to filter to (beware, users IDs and not - actors IDs which will return empty feeds - schema: - type: number - - name: accountName - in: query - required: false - description: The name of the local account to filter to - schema: - type: string - responses: - '200': - description: successful operation /jobs/{state}: get: - summary: Get list of jobs + summary: List instance jobs security: - OAuth2: - admin @@ -340,8 +319,8 @@ paths: - OAuth2: - admin tags: - - Server Following - summary: Unfollow a server by hostname + - Instance Follows + summary: Unfollow a server parameters: - name: host in: path @@ -355,8 +334,8 @@ paths: /server/followers: get: tags: - - Server Following - summary: Get followers of the server + - Instance Follows + summary: List instance followers parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -373,8 +352,8 @@ paths: /server/following: get: tags: - - Server Following - summary: Get servers followed by the server + - Instance Follows + summary: List instance followings parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -393,11 +372,11 @@ paths: - OAuth2: - admin tags: - - Server Following + - Instance Follows summary: Follow a server responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation requestBody: content: application/json: @@ -405,12 +384,12 @@ paths: $ref: '#/components/schemas/Follow' /users: post: - summary: Creates user + summary: Create a user security: - OAuth2: - admin tags: - - User + - Users responses: '200': description: successful operation @@ -426,11 +405,11 @@ paths: description: User to create required: true get: - summary: Get a list of users + summary: List users security: - OAuth2: [] tags: - - User + - Users parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -446,23 +425,23 @@ paths: $ref: '#/components/schemas/User' '/users/{id}': delete: - summary: Delete a user by its id + summary: Delete a user security: - OAuth2: - admin tags: - - User + - Users parameters: - $ref: '#/components/parameters/id' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation get: - summary: Get user by its id + summary: Get a user security: - OAuth2: [] tags: - - User + - Users parameters: - $ref: '#/components/parameters/id' responses: @@ -473,30 +452,44 @@ paths: schema: $ref: '#/components/schemas/User' put: - summary: Update user profile by its id + summary: Update a user security: - OAuth2: [] tags: - - User + - Users parameters: - $ref: '#/components/parameters/id' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateUser' required: true + /users/register: + post: + summary: Register a user + tags: + - Users + responses: + '204': + description: successful operation + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/RegisterUser' + required: true /users/me: get: - summary: Get current user information + summary: Get my user information security: - OAuth2: - user tags: - - User + - My User responses: '200': description: successful operation @@ -507,29 +500,49 @@ paths: items: $ref: '#/components/schemas/User' put: - summary: Update current user information + summary: Update my user information security: - OAuth2: - user tags: - - User + - My User responses: '204': - description: Successful operation + description: successful operation requestBody: content: application/json: schema: $ref: '#/components/schemas/UpdateMe' required: true + /users/me/videos/imports: + get: + summary: Get video imports of my user + security: + - OAuth2: + - user + tags: + - Videos + - 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 + summary: Get my user used quota security: - OAuth2: - user tags: - - User + - My User responses: '200': description: successful operation @@ -539,11 +552,12 @@ paths: type: number '/users/me/videos/{videoId}/rating': get: - summary: 'Get rating of video by its id, among those of the current user' + summary: Get rate of my user for a video security: - OAuth2: [] tags: - - User + - My User + - Video Rates parameters: - name: videoId in: path @@ -560,12 +574,13 @@ paths: $ref: '#/components/schemas/GetMeVideoRating' /users/me/videos: get: - summary: Get videos of the current user + summary: Get videos of my user security: - OAuth2: - user tags: - - User + - My User + - Videos parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -579,12 +594,12 @@ paths: $ref: '#/components/schemas/VideoListResponse' /users/me/subscriptions: get: - summary: Get subscriptions of the current user + summary: Get my user subscriptions security: - OAuth2: - user tags: - - User + - My Subscriptions parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -593,23 +608,23 @@ paths: '200': description: successful operation post: - summary: Add subscription to the current user + summary: Add subscription to my user security: - OAuth2: - user tags: - - User + - My Subscriptions responses: '200': description: successful operation /users/me/subscriptions/exist: get: - summary: Get if subscriptions exist for the current user + summary: Get if subscriptions exist for my user security: - OAuth2: - user tags: - - User + - My Subscriptions parameters: - $ref: '#/components/parameters/subscriptionsUris' responses: @@ -621,16 +636,25 @@ paths: type: object /users/me/subscriptions/videos: get: - summary: Get videos of subscriptions of the current user + summary: List videos of subscriptions of my user security: - OAuth2: - user tags: - - User + - My Subscriptions + - Videos parameters: + - $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/skipCount' - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/videosSort' responses: '200': description: successful operation @@ -638,14 +662,16 @@ paths: application/json: schema: $ref: '#/components/schemas/VideoListResponse' - '/users/me/subscriptions/{uri}': + '/users/me/subscriptions/{subscriptionHandle}': get: - summary: Get subscription of the current user for a given uri + summary: Get subscription of my user security: - OAuth2: - user tags: - - User + - My Subscriptions + parameters: + - $ref: '#/components/parameters/subscriptionHandle' responses: '200': description: successful operation @@ -654,36 +680,24 @@ paths: schema: $ref: '#/components/schemas/VideoChannel' delete: - summary: Delete subscription of the current user for a given uri + summary: Delete subscription of my user security: - OAuth2: - user tags: - - User + - My Subscriptions + parameters: + - $ref: '#/components/parameters/subscriptionHandle' responses: '200': description: successful operation - /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/avatar/pick: post: - summary: Update current user avatar + summary: Update my user avatar security: - OAuth2: [] tags: - - User + - My User responses: '200': description: successful operation @@ -702,12 +716,70 @@ paths: type: string format: binary encoding: - profileImage: - # only accept png/jpeg + avatarfile: contentType: image/png, image/jpeg + /videos/ownership: + get: + summary: List video ownership changes + tags: + - Video Ownership Change + security: + - OAuth2: [] + responses: + '200': + description: successful operation + '/videos/ownership/{id}/accept': + post: + summary: Accept ownership change request + tags: + - Video Ownership Change + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '204': + description: successful operation + '/videos/ownership/{id}/refuse': + post: + summary: Refuse ownership change request + tags: + - Video Ownership Change + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '204': + description: successful operation + '/videos/{id}/give-ownership': + post: + summary: Request ownership change + tags: + - Video Ownership Change + 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': + description: successful operation + '400': + description: 'Changing video ownership to a remote account is not supported yet' /videos: get: - summary: Get list of videos + summary: List videos tags: - Video parameters: @@ -718,6 +790,7 @@ paths: - $ref: '#/components/parameters/languageOneOf' - $ref: '#/components/parameters/nsfw' - $ref: '#/components/parameters/filter' + - $ref: '#/components/parameters/skipCount' - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - $ref: '#/components/parameters/videosSort' @@ -730,7 +803,7 @@ paths: $ref: '#/components/schemas/VideoListResponse' /videos/categories: get: - summary: Get list of video licences known by the server + summary: List available video categories tags: - Video responses: @@ -744,7 +817,7 @@ paths: type: string /videos/licences: get: - summary: Get list of video licences known by the server + summary: List available video licences tags: - Video responses: @@ -758,7 +831,7 @@ paths: type: string /videos/languages: get: - summary: Get list of languages known by the server + summary: List available video languages tags: - Video responses: @@ -772,7 +845,7 @@ paths: type: string /videos/privacies: get: - summary: Get list of privacy policies supported by the server + summary: List available video privacies tags: - Video responses: @@ -786,20 +859,16 @@ paths: type: string '/videos/{id}': put: - summary: Update metadata for a video by its id + summary: Update a video security: - OAuth2: [] tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: - '200': + '204': description: successful operation - content: - application/json: - schema: - $ref: '#/components/schemas/Video' requestBody: content: multipart/form-data: @@ -809,9 +878,11 @@ paths: thumbnailfile: description: Video thumbnail file type: string + format: binary previewfile: description: Video preview file type: string + format: binary category: description: Video category type: string @@ -821,6 +892,8 @@ paths: language: description: Video language type: string + privacy: + $ref: '#/components/schemas/VideoPrivacySet' description: description: Video description type: string @@ -839,57 +912,57 @@ paths: tags: description: Video tags (maximum 5 tags each between 2 and 30 characters) type: array + minItems: 1 + maxItems: 5 items: type: string + minLength: 2 + maxLength: 30 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 + originallyPublishedAt: + description: Date when the content was originally published + type: string + format: date-time + scheduleUpdate: + $ref: '#/components/schemas/VideoScheduledUpdate' + encoding: + thumbnailfile: + contentType: image/jpeg + previewfile: + contentType: image/jpeg get: - summary: Get a video by its id + summary: Get a video 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 + summary: Delete a video security: - OAuth2: [] tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation '/videos/{id}/description': get: - summary: Get a video description by its id + summary: Get complete video description tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation @@ -899,23 +972,23 @@ paths: type: string '/videos/{id}/views': post: - summary: Add a view to the video by its id + summary: Add a view to a video tags: - Video parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation '/videos/{id}/watching': put: - summary: Set watching progress of a video by its id for a user + summary: Set watching progress of a video tags: - Video security: - OAuth2: [] parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' requestBody: content: application/json: @@ -924,71 +997,10 @@ paths: 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: [] - parameters: - - $ref: '#/components/parameters/id2' - 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/id2' - 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/id2' - 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/id2' - 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 + summary: Upload a video security: - OAuth2: [] tags: @@ -1000,6 +1012,12 @@ paths: application/json: schema: $ref: '#/components/schemas/VideoUploadResponse' + '403': + description: 'The user video quota is exceeded with this video.' + '408': + description: 'Upload has timed out' + '422': + description: 'Invalid input file.' requestBody: content: multipart/form-data: @@ -1016,9 +1034,11 @@ paths: thumbnailfile: description: Video thumbnail file type: string + format: binary previewfile: description: Video preview file type: string + format: binary privacy: $ref: '#/components/schemas/VideoPrivacySet' category: @@ -1046,18 +1066,34 @@ paths: description: Video name type: string tags: - description: Video tags + description: Video tags (maximum 5 tags each between 2 and 30 characters) type: array + minItems: 1 + maxItems: 5 items: type: string + minLength: 2 + maxLength: 30 commentsEnabled: description: Enable or disable comments for this video type: string - scheduleUpdate: *ref_0 + originallyPublishedAt: + description: Date when the content was originally published + type: string + format: date-time + scheduleUpdate: + $ref: '#/components/schemas/VideoScheduledUpdate' required: - videofile - channelId - name + encoding: + videofile: + contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream + thumbnailfile: + contentType: image/jpeg + previewfile: + contentType: image/jpeg x-code-samples: - lang: Shell source: | @@ -1086,7 +1122,8 @@ paths: "Authorization:Bearer $token" /videos/imports: post: - summary: Import a torrent or magnetURI or HTTP ressource (if enabled by the instance administrator) + summary: Import a video + description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator) security: - OAuth2: [] tags: @@ -1120,9 +1157,11 @@ paths: thumbnailfile: description: Video thumbnail file type: string + format: binary previewfile: description: Video preview file type: string + format: binary privacy: $ref: '#/components/schemas/VideoPrivacySet' category: @@ -1150,24 +1189,38 @@ paths: description: Video name type: string tags: - description: Video tags + description: Video tags (maximum 5 tags each between 2 and 30 characters) type: array + minItems: 1 + maxItems: 5 items: type: string + minLength: 2 + maxLength: 30 commentsEnabled: description: Enable or disable comments for this video type: string - scheduleUpdate: *ref_0 + scheduleUpdate: + $ref: '#/components/schemas/VideoScheduledUpdate' required: - channelId - name + encoding: + torrentfile: + contentType: application/x-bittorrent + thumbnailfile: + contentType: image/jpeg + previewfile: + contentType: image/jpeg /videos/abuse: get: - summary: Get list of reported video abuses + summary: List video abuses security: - - OAuth2: [] + - OAuth2: + - admin + - moderator tags: - - Video Abuse + - Video Abuses parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -1183,19 +1236,93 @@ paths: $ref: '#/components/schemas/VideoAbuse' '/videos/{id}/abuse': post: - summary: 'Report an abuse, on a video by its id' + summary: Report an abuse security: - OAuth2: [] tags: - - Video Abuse + - Video Abuses + - Videos parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + reason: + description: Reason why the user reports this video + type: string + predefinedReasons: + description: Reason categories that help triage reports + type: array + items: + type: string + enum: + - violentOrAbusive + - hatefulOrAbusive + - spamOrMisleading + - privacy + - rights + - serverRules + - thumbnails + - captions + startAt: + type: number + description: Timestamp in the video that marks the beginning of the report + endAt: + type: number + description: Timestamp in the video that marks the ending of the report + required: + - reason responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation + '/videos/{id}/abuse/{abuseId}': + put: + summary: Update an abuse + security: + - OAuth2: + - admin + - moderator + tags: + - Video Abuses + responses: + '204': + description: successful operation + parameters: + - $ref: '#/components/parameters/idOrUUID' + - $ref: '#/components/parameters/abuseId' + requestBody: + content: + application/json: + schema: + type: object + properties: + state: + $ref: '#/components/schemas/VideoAbuseStateSet' + moderationComment: + type: string + description: 'Update the comment of the video abuse for other admin/moderators' + delete: + summary: Delete an abuse + security: + - OAuth2: + - admin + - moderator + tags: + - Video Abuses + responses: + '204': + description: successful operation + parameters: + - $ref: '#/components/parameters/idOrUUID' + - $ref: '#/components/parameters/abuseId' + '/videos/{id}/blacklist': post: - summary: Put on blacklist a video by its id + summary: Blacklist a video security: - OAuth2: - admin @@ -1203,10 +1330,10 @@ paths: tags: - Video Blacklist parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation delete: summary: Delete an entry of the blacklist of a video by its id security: @@ -1216,13 +1343,13 @@ paths: tags: - Video Blacklist parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation /videos/blacklist: get: - summary: Get list of videos on blacklist + summary: List blacklisted videos security: - OAuth2: - admin @@ -1244,11 +1371,11 @@ paths: $ref: '#/components/schemas/VideoBlacklist' /videos/{id}/captions: get: - summary: Get list of video's captions + summary: List captions of a video tags: - Video Caption parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation @@ -1269,7 +1396,7 @@ paths: tags: - Video Caption parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/captionLanguage' requestBody: content: @@ -1281,24 +1408,27 @@ paths: description: The file to upload. type: string format: binary + encoding: + captionfile: + contentType: text/vtt, application/x-subrip, text/plain responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation delete: summary: Delete a video caption tags: - Video Caption parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/captionLanguage' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation /video-channels: get: - summary: Get list of video channels + summary: List video channels tags: - - Video Channel + - Video Channels parameters: - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' @@ -1313,21 +1443,24 @@ paths: items: $ref: '#/components/schemas/VideoChannel' post: - summary: Creates a video channel for the current user + summary: Create a video channel security: - OAuth2: [] tags: - - Video Channel + - Video Channels responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation requestBody: - $ref: '#/components/requestBodies/VideoChannelInput' + content: + application/json: + schema: + $ref: '#/components/schemas/VideoChannelCreate' '/video-channels/{channelHandle}': get: - summary: Get a video channel by its id + summary: Get a video channel tags: - - Video Channel + - Video Channels parameters: - $ref: '#/components/parameters/channelHandle' responses: @@ -1338,37 +1471,205 @@ paths: schema: $ref: '#/components/schemas/VideoChannel' put: - summary: Update a video channel by its id + summary: Update a video channel security: - OAuth2: [] tags: - - Video Channel + - Video Channels parameters: - $ref: '#/components/parameters/channelHandle' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation requestBody: - $ref: '#/components/requestBodies/VideoChannelInput' + content: + application/json: + schema: + $ref: '#/components/schemas/VideoChannelUpdate' delete: - summary: Delete a video channel by its id + summary: Delete a video channel security: - OAuth2: [] tags: - - Video Channel + - Video Channels parameters: - $ref: '#/components/parameters/channelHandle' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation '/video-channels/{channelHandle}/videos': get: - summary: Get videos of a video channel by its id + summary: List videos of a video channel tags: - Video - - Video Channel + - Video Channels parameters: - $ref: '#/components/parameters/channelHandle' + - $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/skipCount' + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/videosSort' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoListResponse' + + /video-playlists/privacies: + get: + summary: List available playlist privacies + tags: + - Video Playlists + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + type: string + + /video-playlists: + get: + summary: List video playlists + tags: + - Video Playlists + parameters: + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/sort' + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/VideoPlaylist' + post: + summary: Create a video playlist + description: 'If the video playlist is set as public, the videoChannelId is mandatory.' + security: + - OAuth2: [] + tags: + - Video Playlists + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + properties: + videoPlaylist: + type: object + properties: + id: + type: number + uuid: + type: string + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + displayName: + description: Video playlist display name + type: string + thumbnailfile: + description: Video playlist thumbnail file + type: string + format: binary + privacy: + $ref: '#/components/schemas/VideoPlaylistPrivacySet' + description: + description: Video playlist description + type: string + videoChannelId: + description: Video channel in which the playlist will be published + type: number + required: + - displayName + + /video-playlists/{id}: + get: + summary: Get a video playlist + tags: + - Video Playlists + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoPlaylist' + put: + summary: Update a video playlist + description: 'If the video playlist is set as public, the playlist must have a assigned channel.' + security: + - OAuth2: [] + tags: + - Video Playlists + responses: + '204': + description: successful operation + parameters: + - $ref: '#/components/parameters/idOrUUID' + requestBody: + content: + multipart/form-data: + schema: + type: object + properties: + displayName: + description: Video playlist display name + type: string + thumbnailfile: + description: Video playlist thumbnail file + type: string + format: binary + privacy: + $ref: '#/components/schemas/VideoPlaylistPrivacySet' + description: + description: Video playlist description + type: string + videoChannelId: + description: Video channel in which the playlist will be published + type: number + delete: + summary: Delete a video playlist + security: + - OAuth2: [] + tags: + - Video Playlists + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '204': + description: successful operation + + /video-playlists/{id}/videos: + get: + summary: 'List videos of a playlist' + tags: + - Videos + - Video Playlists + parameters: + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation @@ -1376,11 +1677,159 @@ paths: application/json: schema: $ref: '#/components/schemas/VideoListResponse' + post: + summary: 'Add a video in a playlist' + security: + - OAuth2: [] + tags: + - Videos + - Video Playlists + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + properties: + videoPlaylistElement: + type: object + properties: + id: + type: number + requestBody: + content: + application/json: + schema: + type: object + properties: + videoId: + type: number + description: 'Video to add in the playlist' + startTimestamp: + type: number + description: 'Start the video at this specific timestamp (in seconds)' + stopTimestamp: + type: number + description: 'Stop the video at this specific timestamp (in seconds)' + required: + - videoId + + /video-playlists/{id}/videos/reorder: + post: + summary: 'Reorder a playlist' + security: + - OAuth2: [] + tags: + - Video Playlists + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '204': + description: successful operation + requestBody: + content: + application/json: + schema: + type: object + properties: + startPosition: + type: number + description: 'Start position of the element to reorder (starts from 1)' + insertAfterPosition: + type: number + description: 'New position for the block to reorder (starts from 0, to add the block before the first element)' + reorderLength: + type: number + description: 'How many element from startPosition to reorder (minimum length is 1)' + required: + - startPosition + - insertAfterPosition + + /video-playlists/{id}/videos/{playlistElementId}: + put: + summary: 'Update a playlist element' + security: + - OAuth2: [] + tags: + - Video Playlists + parameters: + - $ref: '#/components/parameters/idOrUUID' + - $ref: '#/components/parameters/playlistElementId' + responses: + '204': + description: successful operation + requestBody: + content: + application/json: + schema: + type: object + properties: + startTimestamp: + type: number + description: 'Start the video at this specific timestamp (in seconds)' + stopTimestamp: + type: number + description: 'Stop the video at this specific timestamp (in seconds)' + delete: + summary: 'Delete an element from a playlist' + security: + - OAuth2: [] + tags: + - Video Playlists + parameters: + - $ref: '#/components/parameters/idOrUUID' + - $ref: '#/components/parameters/playlistElementId' + responses: + '204': + description: successful operation + + '/users/me/video-playlists/videos-exist': + get: + summary: 'Check video exists in my playlists' + security: + - OAuth2: [] + tags: + - Video Playlists + parameters: + - name: videoIds + in: query + required: true + description: The video ids to check + schema: + type: array + items: + type: number + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: object + properties: + videoId: + type: array + items: + type: object + properties: + playlistElementId: + type: number + playlistId: + type: number + startTimestamp: + type: number + stopTimestamp: + type: number + '/accounts/{name}/video-channels': get: - summary: Get video channels of an account by its name + summary: List video channels of an account tags: - - Video Channel + - Video Channels + - Accounts parameters: - $ref: '#/components/parameters/name' responses: @@ -1394,19 +1843,20 @@ paths: $ref: '#/components/schemas/VideoChannel' '/accounts/{name}/ratings': get: - summary: Get ratings of an account by its name + summary: List ratings of an account security: - OAuth2: [] tags: - - User + - Accounts 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 + description: Optionally filter which ratings to retrieve schema: type: string enum: @@ -1423,14 +1873,14 @@ paths: $ref: '#/components/schemas/VideoRating' '/videos/{id}/comment-threads': get: - summary: Get the comment threads of a video by its id + summary: List threads of a video tags: - - Video Comment + - Video Comments parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' - - $ref: '#/components/parameters/sort' + - $ref: '#/components/parameters/commentsSort' responses: '200': description: successful operation @@ -1439,13 +1889,13 @@ paths: schema: $ref: '#/components/schemas/CommentThreadResponse' post: - summary: 'Creates a comment thread, on a video by its id' + summary: Create a thread security: - OAuth2: [] tags: - - Video Comment + - Video Comments parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '200': description: successful operation @@ -1453,19 +1903,26 @@ paths: application/json: schema: $ref: '#/components/schemas/CommentThreadPostResponse' + requestBody: + content: + application/json: + schema: + type: object + properties: + text: + type: string + description: 'Text comment' + required: + - text + '/videos/{id}/comment-threads/{threadId}': get: - summary: 'Get the comment thread by its id, of a video by its id' + summary: Get a thread tags: - - Video Comment + - Video Comments 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 @@ -1475,13 +1932,13 @@ paths: $ref: '#/components/schemas/VideoCommentThreadTree' '/videos/{id}/comments/{commentId}': post: - summary: 'Creates a comment in a comment thread by its id, of a video by its id' + summary: Reply to a thread of a video security: - OAuth2: [] tags: - - Video Comment + - Video Comments parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/commentId' responses: '200': @@ -1490,45 +1947,109 @@ paths: application/json: schema: $ref: '#/components/schemas/CommentThreadPostResponse' + requestBody: + content: + application/json: + schema: + type: object + properties: + text: + type: string + description: 'Text comment' + required: + - text + delete: - summary: 'Delete a comment in a comment thread by its id, of a video by its id' + summary: Delete a comment or a reply security: - OAuth2: [] tags: - - Video Comment + - Video Comments parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' - $ref: '#/components/parameters/commentId' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation '/videos/{id}/rate': put: - summary: Vote for a video by its id + summary: Like/dislike a video security: - OAuth2: [] tags: - - Video Rate + - Video Rates parameters: - - $ref: '#/components/parameters/id2' + - $ref: '#/components/parameters/idOrUUID' responses: '204': - $ref: '#/paths/~1users~1me/put/responses/204' + description: successful operation /search/videos: get: tags: - Search - summary: Get the videos corresponding to a given query + summary: Search videos parameters: + - $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/skipCount' - $ref: '#/components/parameters/start' - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/searchTarget' - $ref: '#/components/parameters/videosSearchSort' - name: search in: query required: true - description: String to search + description: > + String to search. If the user can make a remote URI search, and the string is an URI then the + PeerTube instance will fetch the remote object and add it to its database. Then, + you can use the REST API to fetch the complete video information and interact with it. + schema: + type: string + - name: startDate + in: query + required: true + description: Get videos that are published after this date + schema: + type: string + format: date-time + - name: endDate + in: query + required: true + description: Get videos that are published before this date + schema: + type: string + format: date-time + - name: originallyPublishedStartDate + in: query + required: true + description: Get videos that are originally published after this date + schema: + type: string + format: date-time + - name: originallyPublishedEndDate + in: query + required: true + description: Get videos that are originally published before this date schema: type: string + format: date-time + - name: durationMin + in: query + required: true + description: Get videos that have this minimum duration + schema: + type: number + - name: durationMax + in: query + required: true + description: Get videos that have this maximum duration + schema: + type: number responses: '200': description: successful operation @@ -1536,13 +2057,41 @@ paths: application/json: schema: $ref: '#/components/schemas/VideoListResponse' + /search/video-channels: + get: + tags: + - Search + summary: Search channels + parameters: + - $ref: '#/components/parameters/start' + - $ref: '#/components/parameters/count' + - $ref: '#/components/parameters/searchTarget' + - $ref: '#/components/parameters/sort' + - name: search + in: query + required: true + description: > + String to search. If the user can make a remote URI search, and the string is an URI then the + PeerTube instance will fetch the remote object and add it to its database. Then, + you can use the REST API to fetch the complete channel information and interact with it. + schema: + type: string + responses: + '200': + description: successful operation + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/VideoChannel' 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 Test Server (live data - bleeding edge version) + description: Live Test Server (live data - latest nighlty version) - url: 'https://peertube3.cpy.re/api/v1' - description: Live Test Server (live data - bleeding edge version) + description: Live Test Server (live data - latest RC version) components: parameters: start: @@ -1556,7 +2105,7 @@ components: name: count in: query required: false - description: Number of items + description: "Number of items (max: 100)" schema: type: number sort: @@ -1566,6 +2115,26 @@ components: description: Sort column (-createdAt for example) schema: type: string + searchTarget: + name: searchTarget + in: query + required: false + description: > + If the administrator enabled search index support, you can override the default search target. + + + **Warning**: If you choose to make an index search, PeerTube will get results from a third party service. + It means the instance may not know the objects you fetched. If you want to load video/channel information: + * If the current user has the ability to make a remote URI search (this information is available in the config endpoint), + then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database. + After that, you can use the classic REST API endpoints to fetch the complete object or interact with it + * If the current user has not the ability to make a remote URI search, then redirect the user on the origin instance or fetch + the data from the origin instance API + schema: + type: string + enum: + - 'local' + - 'search-index' videosSort: name: sort in: query @@ -1596,6 +2165,16 @@ components: - -views - -likes - -match + commentsSort: + name: sort + in: query + required: false + description: Sort comments by criteria + schema: + type: string + enum: + - -createdAt + - -totalReplies blacklistsSort: name: sort in: query @@ -1650,13 +2229,27 @@ components: description: The user id schema: type: number - id2: + idOrUUID: name: id in: path required: true - description: The video id or uuid + description: The object id or uuid schema: type: string + playlistElementId: + name: playlistElementId + in: path + required: true + description: Playlist element id + schema: + type: number + abuseId: + name: abuseId + in: path + required: true + description: Video abuse id + schema: + type: number captionLanguage: name: captionLanguage in: path @@ -1671,10 +2264,24 @@ components: description: "The video channel handle (example: 'my_username@example.com' or 'my_username')" schema: type: string - commentId: + 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 @@ -1682,7 +2289,7 @@ components: name: categoryOneOf in: query required: false - description: category id of the video + description: category id of the video (see /videos/categories) schema: oneOf: - type: number @@ -1721,7 +2328,7 @@ components: name: languageOneOf in: query required: false - description: language id of the video + description: language id of the video (see /videos/languages). Use _unknown to filter on videos that don't have a video language schema: oneOf: - type: string @@ -1734,7 +2341,7 @@ components: name: licenceOneOf in: query required: false - description: licence id of the video + description: licence id of the video (see /videos/licences) schema: oneOf: - type: number @@ -1743,6 +2350,16 @@ components: type: number style: form explode: false + skipCount: + name: skipCount + in: query + required: false + description: if you don't need the `total` in the response + schema: + type: string + enum: + - 'true' + - 'false' nsfw: name: nsfw in: query @@ -1775,12 +2392,6 @@ components: type: array items: type: string - requestBodies: - VideoChannelInput: - content: - application/json: - schema: - $ref: '#/components/schemas/VideoChannelInput' securitySchemes: OAuth2: description: > @@ -1817,14 +2428,65 @@ components: type: string label: type: string + + VideoPlaylistPrivacySet: + type: integer + enum: + - 1 + - 2 + - 3 + description: 'The video playlist privacy (Public = 1, Unlisted = 2, Private = 3)' + VideoPlaylistPrivacyConstant: + properties: + id: + $ref: '#/components/schemas/VideoPlaylistPrivacySet' + label: + type: string + + VideoPlaylistTypeSet: + type: integer + enum: + - 1 + - 2 + description: 'The video playlist type (Regular = 1, Watch Later = 2)' + VideoPlaylistTypeConstant: + properties: + id: + $ref: '#/components/schemas/VideoPlaylistTypeSet' + label: + type: string + VideoPrivacySet: type: integer enum: - 1 - 2 - 3 - description: 'The video privacy (Public = 1, Unlisted = 2, Private = 3)' + - 4 + description: 'The video privacy (Public = 1, Unlisted = 2, Private = 3, Internal = 4)' VideoPrivacyConstant: + properties: + id: + $ref: '#/components/schemas/VideoPrivacySet' + label: + type: string + + NSFWPolicy: + type: string + enum: + - display + - blur + - do_not_list + + UserRole: + type: number + enum: + - 0 + - 1 + - 2 + description: 'The user role (Admin = 0, Moderator = 1, User = 2)' + + VideoStateConstant: properties: id: type: integer @@ -1832,8 +2494,143 @@ components: - 1 - 2 - 3 + description: 'The video state (Published = 1, to transcode = 2, to import = 3)' + label: + type: string + + VideoAbuseStateSet: + type: integer + enum: + - 1 + - 2 + - 3 + description: 'The video playlist privacy (Pending = 1, Rejected = 2, Accepted = 3)' + VideoAbuseStateConstant: + properties: + id: + $ref: '#/components/schemas/VideoAbuseStateSet' + label: + type: string + VideoAbusePredefinedReasons: + type: array + items: + type: string + enum: + - violentOrAbusive + - hatefulOrAbusive + - spamOrMisleading + - privacy + - rights + - serverRules + - thumbnails + - captions + + VideoResolutionConstant: + properties: + id: + type: integer + description: 'Video resolution (240, 360, 720 ...)' label: type: string + VideoScheduledUpdate: + properties: + privacy: + $ref: '#/components/schemas/VideoPrivacySet' + updateAt: + type: string + format: date + description: When to update the video + required: + - updateAt + AccountSummary: + properties: + id: + type: number + name: + type: string + displayName: + type: string + url: + type: string + host: + type: string + avatar: + nullable: true + allOf: + - $ref: '#/components/schemas/Avatar' + VideoChannelSummary: + properties: + id: + type: number + name: + type: string + displayName: + type: string + url: + type: string + host: + type: string + avatar: + nullable: true + allOf: + - $ref: '#/components/schemas/Avatar' + PlaylistElement: + properties: + position: + type: number + startTimestamp: + type: number + stopTimestamp: + type: number + video: + nullable: true + allOf: + - $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 + torrentDownloadUrl: + type: string + fileUrl: + type: string + fileDownloadUrl: + type: string + fps: + type: number + metadataUrl: + type: string + VideoStreamingPlaylists: + properties: + id: + type: number + type: + type: number + enum: + - 1 + description: 'Playlist type (HLS = 1)' + playlistUrl: + type: string + segmentsSha256Url: + type: string + files: + type: array + items: + $ref: '#/components/schemas/VideoFile' + redundancies: + type: array + items: + type: object + properties: + baseUrl: + type: string Video: properties: id: @@ -1846,6 +2643,8 @@ components: type: string updatedAt: type: string + originallyPublishedAt: + type: string category: $ref: '#/components/schemas/VideoConstantNumber' licence: @@ -1876,27 +2675,114 @@ components: type: number nsfw: type: boolean + waitTranscoding: + type: boolean + nullable: true + state: + $ref: '#/components/schemas/VideoStateConstant' + scheduledUpdate: + nullable: true + allOf: + - $ref: '#/components/schemas/VideoScheduledUpdate' + blacklisted: + nullable: true + type: boolean + blacklistedReason: + nullable: true + type: string account: + $ref: '#/components/schemas/AccountSummary' + 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: type: number reason: type: string + predefinedReasons: + $ref: '#/components/schemas/VideoAbusePredefinedReasons' reporterAccount: $ref: '#/components/schemas/Account' + state: + $ref: '#/components/schemas/VideoAbuseStateConstant' + moderationComment: + type: string video: type: object properties: @@ -1906,8 +2792,6 @@ components: type: string uuid: type: string - url: - type: string createdAt: type: string VideoBlacklist: @@ -1951,6 +2835,34 @@ components: type: number uuid: type: string + VideoPlaylist: + properties: + id: + type: number + createdAt: + type: string + updatedAt: + type: string + description: + type: string + uuid: + type: string + displayName: + type: string + isLocal: + type: boolean + videoLength: + type: number + thumbnailPath: + type: string + privacy: + $ref: '#/components/schemas/VideoPlaylistPrivacyConstant' + type: + $ref: '#/components/schemas/VideoPlaylistTypeConstant' + ownerAccount: + $ref: '#/components/schemas/AccountSummary' + videoChannel: + $ref: '#/components/schemas/VideoChannelSummary' VideoComment: properties: id: @@ -1969,6 +2881,8 @@ components: type: string updatedAt: type: string + totalRepliesFromVideoAuthor: + type: number totalReplies: type: number account: @@ -1999,8 +2913,6 @@ components: properties: id: type: number - uuid: - type: string url: type: string name: @@ -2021,8 +2933,12 @@ components: allOf: - $ref: '#/components/schemas/Actor' - properties: + userId: + type: string displayName: type: string + description: + type: string User: properties: id: @@ -2031,17 +2947,20 @@ components: type: string email: type: string - displayNSFW: + theme: + type: string + description: 'Theme enabled by this user' + emailVerified: + type: boolean + description: 'Is email verified?' + nsfwPolicy: + $ref: '#/components/schemas/NSFWPolicy' + webtorrentEnabled: type: boolean autoPlayVideo: type: boolean role: - type: integer - enum: - - 0 - - 1 - - 2 - description: 'The user role (Admin = 0, Moderator = 1, User = 2)' + $ref: '#/components/schemas/UserRole' roleLabel: type: string enum: @@ -2052,6 +2971,24 @@ components: type: number videoQuotaDaily: type: number + videosCount: + type: number + videoAbusesCount: + type: number + videoAbusesAcceptedCount: + type: number + videoAbusesCreatedCount: + type: number + videoCommentsCount: + type: number + noInstanceConfigWarningModal: + type: boolean + noWelcomeModal: + type: boolean + blocked: + type: boolean + blockedReason: + type: string createdAt: type: string account: @@ -2066,18 +3003,117 @@ components: type: number ServerConfig: properties: + instance: + type: object + properties: + name: + type: string + shortDescription: + type: string + defaultClientRoute: + type: string + isNSFW: + type: boolean + defaultNSFWPolicy: + type: string + customizations: + type: object + properties: + javascript: + type: string + css: + type: string + search: + type: object + properties: + remoteUri: + type: object + properties: + users: + type: boolean + anonymous: + type: boolean + plugin: + type: object + properties: + registered: + type: array + items: + type: string + theme: + type: object + properties: + registered: + type: array + items: + type: string + email: + type: object + properties: + enabled: + type: boolean + contactForm: + type: object + properties: + enabled: + type: boolean + serverVersion: + type: string + serverCommit: + type: string signup: type: object properties: allowed: type: boolean + allowedForCurrentIP: + type: boolean + requiresEmailVerification: + type: boolean transcoding: type: object properties: + hls: + type: object + properties: + enabled: + type: boolean + webtorrent: + type: object + properties: + enabled: + type: boolean enabledResolutions: type: array items: type: number + import: + type: object + properties: + videos: + type: object + properties: + http: + type: object + properties: + enabled: + type: boolean + torrent: + type: object + properties: + enabled: + type: boolean + autoBlacklist: + type: object + properties: + videos: + type: object + properties: + ofUsers: + type: object + properties: + enabled: + type: boolean avatar: type: object properties: @@ -2094,15 +3130,234 @@ components: items: type: string video: + type: object + properties: + image: + type: object + properties: + extensions: + type: array + items: + type: string + size: + type: object + properties: + max: + type: number + file: + type: object + properties: + extensions: + type: array + items: + type: string + videoCaption: type: object properties: file: type: object properties: + size: + type: object + properties: + max: + type: number extensions: type: array items: type: string + user: + type: object + properties: + videoQuota: + type: number + videoQuotaDaily: + type: number + trending: + type: object + properties: + videos: + type: object + properties: + intervalDays: + type: number + tracker: + type: object + properties: + enabled: + type: boolean + followings: + type: object + properties: + instance: + type: object + properties: + autoFollowIndex: + type: object + properties: + indexUrl: + type: string + ServerConfigAbout: + properties: + instance: + type: object + properties: + name: + type: string + shortDescription: + type: string + description: + type: string + terms: + type: string + ServerConfigCustom: + properties: + instance: + type: object + properties: + name: + type: string + shortDescription: + type: string + description: + type: string + terms: + type: string + defaultClientRoute: + type: string + isNSFW: + type: boolean + defaultNSFWPolicy: + type: string + customizations: + type: object + properties: + javascript: + type: string + css: + type: string + theme: + type: object + properties: + default: + type: string + services: + type: object + properties: + twitter: + type: object + properties: + username: + type: string + whitelisted: + type: boolean + cache: + type: object + properties: + previews: + type: object + properties: + size: + type: number + captions: + type: object + properties: + size: + type: number + signup: + type: object + properties: + enabled: + type: boolean + limit: + type: number + requiresEmailVerification: + type: boolean + admin: + type: object + properties: + email: + type: string + contactForm: + type: object + properties: + enabled: + type: boolean + user: + type: object + properties: + videoQuota: + type: number + videoQuotaDaily: + type: number + transcoding: + type: object + properties: + enabled: + type: boolean + allowAdditionalExtensions: + type: boolean + allowAudioFiles: + type: boolean + threads: + type: number + resolutions: + type: object + properties: + 240p: + type: boolean + 360p: + type: boolean + 480p: + type: boolean + 720p: + type: boolean + 1080p: + type: boolean + 2160p: + type: boolean + hls: + type: object + properties: + enabled: + type: boolean + import: + type: object + properties: + videos: + type: object + properties: + http: + type: object + properties: + enabled: + type: boolean + torrent: + type: object + properties: + enabled: + type: boolean + autoBlacklist: + type: object + properties: + videos: + type: object + properties: + ofUsers: + type: object + properties: + enabled: + type: boolean + followers: + type: object + properties: + instance: + type: object + properties: + enabled: + type: boolean + manualApproval: + type: boolean Follow: properties: id: @@ -2188,7 +3443,7 @@ components: description: 'The user username ' password: type: string - description: 'The user password ' + description: 'The user password. If the smtp server is configured, you can leave empty and an email will be sent ' email: type: string description: 'The user email ' @@ -2199,12 +3454,7 @@ components: type: string description: 'The user daily video quota ' role: - type: integer - enum: - - 0 - - 1 - - 2 - description: 'The user role (Admin = 0, Moderator = 1, User = 2)' + $ref: '#/components/schemas/UserRole' required: - username - password @@ -2227,12 +3477,7 @@ components: type: string 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)' + $ref: '#/components/schemas/UserRole' required: - id - email @@ -2290,14 +3535,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'