X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=support%2Fdoc%2Fapi%2Fopenapi.yaml;h=407f3eb10f0e6f1c780548083a36aa797761469c;hb=bfbdfc584a4f0cd078fc159b2eb59e872873f592;hp=7b6e8a1e4f22fd0f63ce39dcb7208735821bb2a6;hpb=a9bfa85d2cdf13670aaced740da5b493fbeddfce;p=github%2FChocobozzz%2FPeerTube.git diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index 7b6e8a1e4..407f3eb10 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: 3.3.0 + version: 4.0.0 contact: name: PeerTube Community url: https://joinpeertube.org @@ -252,6 +252,8 @@ tags: The import function is practical when the desired video/audio is available online. It makes PeerTube download it for you, saving you as much bandwidth and avoiding any instability or limitation your network might have. + - name: Video Imports + description: Operations dealing with listing, adding and removing video imports. - name: Video Captions description: Operations dealing with listing, adding and removing closed captions of a video. - name: Video Channels @@ -271,6 +273,8 @@ tags: description: Operations on video files - name: Video Transcoding description: Video transcoding related operations + - name: Video stats + description: Video statistics - name: Feeds description: Server syndication feeds - name: Search @@ -306,11 +310,13 @@ x-tagGroups: tags: - Video - Video Upload + - Video Imports - Video Captions - Video Channels - Video Comments - Video Rates - Video Playlists + - Video Stats - Video Ownership Change - Video Mirroring - Video Files @@ -587,6 +593,30 @@ paths: '204': description: successful operation + /jobs/pause: + post: + summary: Pause job queue + security: + - OAuth2: + - admin + tags: + - Job + responses: + '204': + description: successful operation + + /jobs/resume: + post: + summary: Resume job queue + security: + - OAuth2: + - admin + tags: + - Job + responses: + '204': + description: successful operation + /jobs/{state}: get: summary: List instance jobs @@ -1476,6 +1506,23 @@ paths: schema: $ref: '#/components/schemas/VideoListResponse' + /users/me/history/videos/{videoId}: + delete: + summary: Delete history element + security: + - OAuth2: [] + tags: + - My History + parameters: + - name: videoId + in: path + required: true + schema: + $ref: '#/components/schemas/Video/properties/id' + responses: + '204': + description: successful operation + /users/me/history/videos/remove: post: summary: Clear video history @@ -1512,8 +1559,10 @@ paths: schema: type: object properties: - avatar: - $ref: '#/components/schemas/ActorImage' + avatars: + type: array + items: + $ref: '#/components/schemas/ActorImage' '413': description: image file too large headers: @@ -1573,7 +1622,7 @@ paths: '403': description: cannot terminate an ownership change of another user '404': - description: video owneship change not found + description: video ownership change not found '/videos/ownership/{id}/refuse': post: @@ -1590,7 +1639,7 @@ paths: '403': description: cannot terminate an ownership change of another user '404': - description: video owneship change not found + description: video ownership change not found '/videos/{id}/give-ownership': post: @@ -1856,12 +1905,19 @@ paths: '/videos/{id}/views': post: - summary: Add a view to a video + summary: Notify user is watching a video + description: Call this endpoint regularly (every 5-10 seconds for example) to notify the server the user is watching the video. After a while, PeerTube will increase video's viewers counter. If the user is authenticated, PeerTube will also store the current player time. operationId: addView tags: - Video parameters: - $ref: '#/components/parameters/idOrUUID' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/UserViewingVideo' + required: true responses: '204': description: successful operation @@ -1869,7 +1925,8 @@ paths: '/videos/{id}/watching': put: summary: Set watching progress of a video - operationId: setProgress + deprecated: true + description: This endpoint has been deprecated. Use `/videos/{id}/views` instead tags: - Video security: @@ -1880,12 +1937,73 @@ paths: content: application/json: schema: - $ref: '#/components/schemas/UserWatchingVideo' + $ref: '#/components/schemas/UserViewingVideo' required: true responses: '204': description: successful operation + '/videos/{id}/stats/overall': + get: + summary: Get overall stats of a video + tags: + - Video Stats + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoStatsOverall' + + '/videos/{id}/stats/retention': + get: + summary: Get retention stats of a video + tags: + - Video Stats + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoStatsRetention' + + '/videos/{id}/stats/timeseries/{metric}': + get: + summary: Get timeserie stats of a video + tags: + - Video Stats + security: + - OAuth2: [] + parameters: + - $ref: '#/components/parameters/idOrUUID' + - + name: metric + in: path + required: true + description: The metric to get + schema: + type: string + enum: + - 'viewers' + - 'aggregateWatchTime' + responses: + '200': + description: successful operation + content: + application/json: + schema: + $ref: '#/components/schemas/VideoStatsTimeserie' + /videos/upload: post: summary: Upload a video @@ -2032,7 +2150,7 @@ paths: in: query required: true description: | - Created session id to proceed with. If you didn't send chunks in the last 12 hours, it is + Created session id to proceed with. If you didn't send chunks in the last hour, it is not valid anymore and you need to initialize a new upload. schema: type: string @@ -2056,9 +2174,6 @@ paths: description: | Size of the chunk that the request is sending. - The chunk size __must be a multiple of 256 KB__, and unlike [Google Resumable](https://developers.google.com/youtube/v3/guides/using_resumable_upload_protocol) - doesn't mandate for chunks to have the same size throughout the upload sequence. - Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from 1048576 bytes (~1MB) and increases or reduces size depending on connection health. requestBody: @@ -2149,7 +2264,7 @@ paths: security: - OAuth2: [] tags: - - Video + - Video Imports - Video Upload requestBody: content: @@ -2177,6 +2292,34 @@ paths: '409': description: HTTP or Torrent/magnetURI import not enabled + /videos/imports/{id}/cancel: + post: + summary: Cancel video import + description: Cancel a pending video import + security: + - OAuth2: [] + tags: + - Video Imports + parameters: + - $ref: '#/components/parameters/id' + responses: + '204': + description: successful operation + + /videos/imports/{id}: + delete: + summary: Delete video import + description: Delete ended video import + security: + - OAuth2: [] + tags: + - Video Imports + parameters: + - $ref: '#/components/parameters/id' + responses: + '204': + description: successful operation + /videos/live: post: summary: Create a live @@ -2221,6 +2364,9 @@ paths: permanentLive: description: User can stream multiple times in a permanent live type: boolean + latencyMode: + description: User can select live latency mode if enabled by the instance + $ref: '#/components/schemas/LiveVideoLatencyMode' thumbnailfile: description: Live video/replay thumbnail file type: string @@ -2806,7 +2952,7 @@ paths: type: object properties: id: - $ref: '#/components/schemas/VideoChannel/properties/id' + $ref: '#/components/schemas/id' requestBody: content: application/json: @@ -2938,8 +3084,10 @@ paths: schema: type: object properties: - avatar: - $ref: '#/components/schemas/ActorImage' + avatars: + type: array + items: + $ref: '#/components/schemas/ActorImage' '413': description: image file too large headers: @@ -2992,8 +3140,10 @@ paths: schema: type: object properties: - banner: - $ref: '#/components/schemas/ActorImage' + banners: + type: array + items: + $ref: '#/components/schemas/ActorImage' '413': description: image file too large headers: @@ -4750,7 +4900,7 @@ components: name: id in: path required: true - description: The user id + description: Entity id schema: $ref: '#/components/schemas/id' idOrUUID: @@ -5213,6 +5363,14 @@ components: description: 'Admin flags for the user (None = `0`, Bypass video blocklist = `1`)' example: 1 + LiveVideoLatencyMode: + type: integer + enum: + - 1 + - 2 + - 3 + description: 'The live latency mode (Default = `1`, HIght latency = `2`, Small Latency = `3`)' + VideoStateConstant: properties: id: @@ -5292,10 +5450,10 @@ components: host: type: string format: hostname - avatar: - nullable: true - allOf: - - $ref: '#/components/schemas/ActorImage' + avatars: + type: array + items: + $ref: '#/components/schemas/ActorImage' VideoChannelSummary: properties: id: @@ -5310,10 +5468,10 @@ components: host: type: string format: hostname - avatar: - nullable: true - allOf: - - $ref: '#/components/schemas/ActorImage' + avatars: + type: array + items: + $ref: '#/components/schemas/ActorImage' PlaylistElement: properties: position: @@ -5897,6 +6055,8 @@ components: properties: path: type: string + width: + type: integer createdAt: type: string format: date-time @@ -5914,12 +6074,10 @@ components: host: type: string format: hostname - avatar: - nullable: true - type: object - properties: - path: - type: string + avatars: + type: array + items: + $ref: '#/components/schemas/ActorImage' Actor: properties: id: @@ -5952,8 +6110,6 @@ components: updatedAt: type: string format: date-time - avatar: - $ref: '#/components/schemas/ActorImage' Account: allOf: - $ref: '#/components/schemas/Actor' @@ -5970,13 +6126,76 @@ components: description: type: string description: text or bio displayed on the account's profile - UserWatchingVideo: + UserViewingVideo: + required: + - currentTime properties: currentTime: type: integer format: seconds description: timestamp within the video, in seconds example: 5 + viewEvent: + type: string + enum: + - seek + description: > + Event since last viewing call: + * `seek` - If the user seeked the video + + VideoStatsOverall: + properties: + averageWatchTime: + type: number + totalWatchTime: + type: number + viewersPeak: + type: number + viewersPeakDate: + type: string + format: date-time + views: + type: number + likes: + type: number + dislikes: + type: number + comments: + type: number + countries: + type: array + items: + type: object + properties: + isoCode: + type: string + viewers: + type: number + + VideoStatsRetention: + properties: + data: + type: array + items: + type: object + properties: + second: + type: number + retentionPercent: + type: number + + VideoStatsTimeserie: + properties: + data: + type: array + items: + type: object + properties: + date: + type: string + value: + type: number + ServerConfig: properties: instance: @@ -6757,6 +6976,8 @@ components: $ref: '#/components/schemas/UserRole' adminFlags: $ref: '#/components/schemas/UserAdminFlags' + password: + $ref: '#/components/schemas/password' UpdateMe: # see shared/models/users/user-update-me.model.ts: properties: @@ -6860,7 +7081,7 @@ components: name: $ref: '#/components/schemas/usernameChannel' displayName: - $ref: '#/components/schemas/VideoChannel/properties/displayName' + type: string required: - username - password @@ -6922,46 +7143,47 @@ components: - refresh_token VideoChannel: - properties: - # GET/POST/PUT properties - displayName: - type: string - description: editable name of the channel, displayed in its representations - example: Videos of Framasoft - minLength: 1 - maxLength: 120 - description: - type: string - example: Videos made with <3 by Framasoft - minLength: 3 - maxLength: 1000 - support: - type: string - description: text shown by default on all videos of this channel, to tell the audience how to support it - example: Please support our work on https://soutenir.framasoft.org/en/ <3 - minLength: 3 - maxLength: 1000 - # GET-only properties - id: - readOnly: true - allOf: - - $ref: '#/components/schemas/id' - isLocal: - readOnly: true - type: boolean - updatedAt: - readOnly: true - type: string - format: date-time - ownerAccount: - readOnly: true - nullable: true - type: object + allOf: + - $ref: '#/components/schemas/Actor' + - type: object properties: - id: - type: integer - uuid: - $ref: '#/components/schemas/UUIDv4' + displayName: + type: string + description: editable name of the channel, displayed in its representations + example: Videos of Framasoft + minLength: 1 + maxLength: 120 + description: + type: string + example: Videos made with <3 by Framasoft + minLength: 3 + maxLength: 1000 + support: + type: string + description: text shown by default on all videos of this channel, to tell the audience how to support it + example: Please support our work on https://soutenir.framasoft.org/en/ <3 + minLength: 3 + maxLength: 1000 + isLocal: + readOnly: true + type: boolean + updatedAt: + readOnly: true + type: string + format: date-time + banners: + type: array + items: + $ref: '#/components/schemas/ActorImage' + ownerAccount: + readOnly: true + nullable: true + type: object + properties: + id: + type: integer + uuid: + $ref: '#/components/schemas/UUIDv4' VideoChannelCreate: allOf: - $ref: '#/components/schemas/VideoChannel' @@ -7228,6 +7450,14 @@ components: - `13` NEW_INSTANCE_FOLLOWER - `14` AUTO_INSTANCE_FOLLOWING + + - `15` ABUSE_STATE_CHANGE + + - `16` ABUSE_NEW_MESSAGE + + - `17` NEW_PLUGIN_VERSION + + - `18` NEW_PEERTUBE_VERSION read: type: boolean video: @@ -7395,6 +7625,9 @@ components: permanentLive: description: User can stream multiple times in a permanent live type: boolean + latencyMode: + description: User can select live latency mode if enabled by the instance + $ref: '#/components/schemas/LiveVideoLatencyMode' LiveVideoResponse: properties: @@ -7410,8 +7643,9 @@ components: permanentLive: description: User can stream multiple times in a permanent live type: boolean - - + latencyMode: + description: User can select live latency mode if enabled by the instance + $ref: '#/components/schemas/LiveVideoLatencyMode' callbacks: searchIndex: