6 name: PeerTube Community
7 url: https://joinpeertube.org
10 url: https://github.com/Chocobozzz/PeerTube/blob/master/LICENSE
12 url: https://joinpeertube.org/img/brand.png
13 altText: PeerTube Project Homepage
15 The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite
16 HTTP/REST library for your programming language to use PeerTube. The spec API is fully compatible with
17 [openapi-generator](https://github.com/OpenAPITools/openapi-generator/wiki/API-client-generator-HOWTO)
18 which generates a client SDK in the language of your choice - we generate some client SDKs automatically:
20 - [Python](https://framagit.org/framasoft/peertube/clients/python)
21 - [Go](https://framagit.org/framasoft/peertube/clients/go)
22 - [Kotlin](https://framagit.org/framasoft/peertube/clients/kotlin)
24 See the [REST API quick start](https://docs.joinpeertube.org/api-rest-getting-started) for a few
25 examples of using the PeerTube API.
29 When you sign up for an account on a PeerTube instance, you are given the possibility
30 to generate sessions on it, and authenticate there using an access token. Only __one
31 access token can currently be used at a time__.
35 Accounts are given permissions based on their role. There are three roles on
36 PeerTube: Administrator, Moderator, and User. See the [roles guide](https://docs.joinpeertube.org/admin-managing-users?id=roles) for a detail of their permissions.
40 The API uses standard HTTP status codes to indicate the success or failure
41 of the API call, completed by a [RFC7807-compliant](https://tools.ietf.org/html/rfc7807) response body.
44 HTTP 1.1 404 Not Found
45 Content-Type: application/problem+json; charset=utf-8
48 "detail": "Video not found",
49 "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
56 We provide error `type` values for [a growing number of cases](https://github.com/Chocobozzz/PeerTube/blob/develop/shared/models/server/server-error-code.enum.ts),
57 but it is still optional. Types are used to disambiguate errors that bear the same status code
61 HTTP 1.1 403 Forbidden
62 Content-Type: application/problem+json; charset=utf-8
65 "detail": "Cannot get this video regarding follow constraints",
66 "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
69 "type": "https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/does_not_respect_follow_constraints"
73 Here a 403 error could otherwise mean that the video is private or blocklisted.
77 Each parameter is evaluated on its own against a set of rules before the route validator
78 proceeds with potential testing involving parameter combinations. Errors coming from validation
79 errors appear earlier and benefit from a more detailed error description:
82 HTTP 1.1 400 Bad Request
83 Content-Type: application/problem+json; charset=utf-8
86 "detail": "Incorrect request parameters: id",
87 "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
88 "instance": "/api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180",
92 "msg": "Invalid value",
94 "value": "9c9de5e8-0a1e-484a-b099-e80766180"
98 "title": "Bad Request",
103 Where `id` is the name of the field concerned by the error, within the route definition.
104 `invalid-params.<field>.location` can be either 'params', 'body', 'header', 'query' or 'cookies', and
105 `invalid-params.<field>.value` reports the value that didn't pass validation whose `invalid-params.<field>.msg`
108 ### Deprecated error fields
110 Some fields could be included with previous versions. They are still included but their use is deprecated:
111 - `error`: superseded by `detail`
112 - `code`: superseded by `type` (which is now an URI)
116 We are rate-limiting all endpoints of PeerTube's API. Custom values can be set by administrators:
118 | Endpoint (prefix: `/api/v1`) | Calls | Time frame |
119 |------------------------------|---------------|--------------|
120 | `/*` | 50 | 10 seconds |
121 | `POST /users/token` | 15 | 5 minutes |
122 | `POST /users/register` | 2<sup>*</sup> | 5 minutes |
123 | `POST /users/ask-send-verify-email` | 3 | 5 minutes |
125 Depending on the endpoint, <sup>*</sup>failed requests are not taken into account. A service
126 limit is announced by a `429 Too Many Requests` status code.
128 You can get details about the current state of your rate limit by reading the
131 | Header | Description |
132 |-------------------------|------------------------------------------------------------|
133 | `X-RateLimit-Limit` | Number of max requests allowed in the current time period |
134 | `X-RateLimit-Remaining` | Number of remaining requests in the current time period |
135 | `X-RateLimit-Reset` | Timestamp of end of current time period as UNIX timestamp |
136 | `Retry-After` | Seconds to delay after the first `429` is received |
140 This API features [Cross-Origin Resource Sharing (CORS)](https://fetch.spec.whatwg.org/),
141 allowing cross-domain communication from the browser for some routes:
144 |------------------------- ---|
148 | `/.well-known/webfinger` |
150 In addition, all routes serving ActivityPub are CORS-enabled for all origins.
152 url: https://docs.joinpeertube.org/api-rest-reference.html
156 As a visitor, you can use this API to open an account (if registrations are open on
157 that PeerTube instance). As an admin, you should use the dedicated [User creation
158 API](#operation/addUser) instead.
160 x-displayName: Login/Logout
162 Sessions deal with access tokens over time. Only __one session token can currently be used at a time__.
165 Accounts encompass remote accounts discovered across the federation,
166 and correspond to the main Actor, along with video channels a user can create, which
169 When a comment is posted, it is done with your Account's Actor.
172 Using some features of PeerTube require authentication, for which User
173 provide different levels of permission as well as associated user
174 information. Each user has a corresponding local Account for federation.
177 Operations related to your own User, when logged-in.
178 - name: My Subscriptions
180 Operations related to your subscriptions to video channels, their
181 new videos, and how to keep up to date with their latest publications!
184 Operations related to your watch history.
185 - name: My Notifications
187 Notifications following new videos, follows or reports. They allow you
188 to keep track of the interactions and overall important information that
189 concerns you. You MAY set per-notification type delivery preference, to
190 receive the info either by mail, by in-browser notification or both.
193 Each server exposes public information regarding supported videos and
197 Jobs are long-running tasks enqueued and processed by the instance
198 itself. No additional worker registration is currently available.
199 - name: Instance Follows
201 Managing servers which the instance interacts with is crucial to the
202 concept of federation in PeerTube and external video indexation. The PeerTube
203 server then deals with inter-server ActivityPub operations and propagates
204 information across its social graph by posting activities to actors' inbox
207 url: https://docs.joinpeertube.org/admin-following-instances?id=instances-follows
208 - name: Instance Redundancy
210 Redundancy is part of the inter-server solidarity that PeerTube fosters.
211 Manage the list of instances you wish to help by seeding their videos according
212 to the policy of video selection of your choice. Note that you have a similar functionality
213 to mirror individual videos, see [video mirroring](#tag/Video-Mirroring).
215 url: https://docs.joinpeertube.org/admin-following-instances?id=instances-redundancy
218 Managing plugins installed from a local path or from NPM, or search for new ones.
220 url: https://docs.joinpeertube.org/api-plugins
223 Abuses deal with reports of local or remote videos/comments/accounts alike.
226 Operations dealing with listing, uploading, fetching or modifying videos.
229 Operations dealing with adding video or audio. PeerTube supports two upload modes, and three import modes.
233 - [_legacy_](#operation/uploadLegacy), where the video file is sent in a single request
234 - [_resumable_](#operation/uploadResumableInit), where the video file is sent in chunks
236 You can upload videos more reliably by using the resumable variant. Its protocol lets
237 you resume an upload operation after a network interruption or other transmission failure,
238 saving time and bandwidth in the event of network failures.
240 Favor using resumable uploads in any of the following cases:
241 - You are transferring large files
242 - The likelihood of a network interruption is high
243 - Uploads are originating from a device with a low-bandwidth or unstable Internet connection,
244 such as a mobile device
248 - _URL_-based: where the URL points to any service supported by [youtube-dl](https://ytdl-org.github.io/youtube-dl/)
249 - _magnet_-based: where the URI resolves to a BitTorrent resource containing a single supported video file
250 - _torrent_-based: where the metainfo file resolves to a BitTorrent resource containing a single supported video file
252 The import function is practical when the desired video/audio is available online. It makes PeerTube
253 download it for you, saving you as much bandwidth and avoiding any instability or limitation your network might have.
254 - name: Video Imports
255 description: Operations dealing with listing, adding and removing video imports.
256 - name: Channels Sync
257 description: Operations dealing with synchronizing PeerTube user's channel with channels of other platforms
258 - name: Video Captions
259 description: Operations dealing with listing, adding and removing closed captions of a video.
260 - name: Video Channels
261 description: Operations dealing with the creation, modification and listing of videos within a channel.
262 - name: Video Comments
264 Operations dealing with comments to a video. Comments are organized in threads: adding a
265 comment in response to the video starts a thread, adding a reply to a comment adds it to
266 its root comment thread.
268 description: Operations dealing with blocking videos (removing them from view and preventing interactions).
270 description: Like/dislike a video.
271 - name: Video Playlists
272 description: Operations dealing with playlists of videos. Playlists are bound to users and/or channels.
274 description: Operations on video files
275 - name: Video Transcoding
276 description: Video transcoding related operations
278 description: Video statistics
280 description: Server syndication feeds
283 The search helps to find _videos_ or _channels_ from within the instance and beyond.
284 Videos from other instances federated by the instance (that is, instances
285 followed by the instance) can be found via keywords and other criteria of
288 Administrators can also enable the use of a remote search system, indexing
289 videos and channels not could be not federated by the instance.
291 description: Get and update the custom homepage
292 - name: Video Mirroring
294 PeerTube instances can mirror videos from one another, and help distribute some videos.
296 For importing videos as your own, refer to [video imports](#operation/importVideo).
325 - Video Ownership Change
346 - Instance Redundancy
356 summary: Get an account
357 operationId: getAccount
359 - $ref: '#/components/parameters/name'
362 description: successful operation
366 $ref: '#/components/schemas/Account'
368 description: account not found
370 '/accounts/{name}/videos':
375 summary: 'List videos of an account'
376 operationId: getAccountVideos
378 - $ref: '#/components/parameters/name'
379 - $ref: '#/components/parameters/categoryOneOf'
380 - $ref: '#/components/parameters/isLive'
381 - $ref: '#/components/parameters/tagsOneOf'
382 - $ref: '#/components/parameters/tagsAllOf'
383 - $ref: '#/components/parameters/licenceOneOf'
384 - $ref: '#/components/parameters/languageOneOf'
385 - $ref: '#/components/parameters/nsfw'
386 - $ref: '#/components/parameters/isLocal'
387 - $ref: '#/components/parameters/include'
388 - $ref: '#/components/parameters/privacyOneOf'
389 - $ref: '#/components/parameters/hasHLSFiles'
390 - $ref: '#/components/parameters/hasWebtorrentFiles'
391 - $ref: '#/components/parameters/skipCount'
392 - $ref: '#/components/parameters/start'
393 - $ref: '#/components/parameters/count'
394 - $ref: '#/components/parameters/videosSort'
397 description: successful operation
401 $ref: '#/components/schemas/VideoListResponse'
405 fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
406 .then(function(response) {
407 return response.json()
408 }).then(function(data) {
414 curl -s https://peertube2.cpy.re/api/v1/accounts/{name}/videos | jq
420 uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
422 http = Net::HTTP.new(uri.host, uri.port)
425 response = http.get(uri.request_uri)
427 puts JSON.parse(response.read_body)
432 r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos")
437 '/accounts/{name}/followers':
441 summary: 'List followers of an account'
444 operationId: getAccountFollowers
446 - $ref: '#/components/parameters/name'
447 - $ref: '#/components/parameters/start'
448 - $ref: '#/components/parameters/count'
449 - $ref: '#/components/parameters/followersSort'
450 - $ref: '#/components/parameters/search'
453 description: successful operation
465 $ref: '#/components/schemas/Follow'
471 summary: List accounts
472 operationId: getAccounts
474 - $ref: '#/components/parameters/start'
475 - $ref: '#/components/parameters/count'
476 - $ref: '#/components/parameters/sort'
479 description: successful operation
485 $ref: '#/components/schemas/Account'
491 summary: Get instance public configuration
492 operationId: getConfig
495 description: successful operation
499 $ref: '#/components/schemas/ServerConfig'
502 externalValue: https://peertube2.cpy.re/api/v1/config
506 summary: Get instance "About" information
507 operationId: getAbout
512 description: successful operation
516 $ref: '#/components/schemas/ServerConfigAbout'
519 externalValue: https://peertube2.cpy.re/api/v1/config/about
523 summary: Get instance runtime configuration
524 operationId: getCustomConfig
532 description: successful operation
536 $ref: '#/components/schemas/ServerConfigCustom'
538 summary: Set instance runtime configuration
539 operationId: putCustomConfig
547 description: successful operation
549 x-summary: field inconsistencies
552 - the emailer is disabled and the instance is open to registrations
553 - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled
555 summary: Delete instance runtime configuration
556 operationId: delCustomConfig
564 description: successful operation
566 /custom-pages/homepage/instance:
568 summary: Get instance custom homepage
573 description: No homepage set
575 description: successful operation
579 $ref: '#/components/schemas/CustomHomepage'
581 summary: Set instance custom homepage
595 description: content of the homepage, that will be injected in the client
598 description: successful operation
602 summary: Pause job queue
610 description: successful operation
614 summary: Resume job queue
622 description: successful operation
626 summary: List instance jobs
637 description: The state of the job ('' for for no filter)
647 - $ref: '#/components/parameters/jobType'
648 - $ref: '#/components/parameters/start'
649 - $ref: '#/components/parameters/count'
650 - $ref: '#/components/parameters/sort'
653 description: successful operation
666 $ref: '#/components/schemas/Job'
672 summary: List instances following the server
674 - $ref: '#/components/parameters/followState'
675 - $ref: '#/components/parameters/actorType'
676 - $ref: '#/components/parameters/start'
677 - $ref: '#/components/parameters/count'
678 - $ref: '#/components/parameters/sort'
681 description: successful operation
693 $ref: '#/components/schemas/Follow'
695 '/server/followers/{nameWithHost}':
697 summary: Remove or reject a follower to your server
707 description: The remote actor handle to remove from your followers
713 description: successful operation
715 description: follower not found
717 '/server/followers/{nameWithHost}/reject':
719 summary: Reject a pending follower to your server
729 description: The remote actor handle to remove from your followers
735 description: successful operation
737 description: follower not found
739 '/server/followers/{nameWithHost}/accept':
741 summary: Accept a pending follower to your server
751 description: The remote actor handle to remove from your followers
757 description: successful operation
759 description: follower not found
765 summary: List instances followed by the server
767 - $ref: '#/components/parameters/followState'
768 - $ref: '#/components/parameters/actorType'
769 - $ref: '#/components/parameters/start'
770 - $ref: '#/components/parameters/count'
771 - $ref: '#/components/parameters/sort'
774 description: successful operation
786 $ref: '#/components/schemas/Follow'
793 summary: Follow a list of actors (PeerTube instance, channel or account)
796 description: successful operation
798 description: cannot follow a non-HTTPS server
817 '/server/following/{hostOrHandle}':
819 summary: Unfollow an actor (PeerTube instance, channel or account)
829 description: The hostOrHandle to unfollow
834 description: successful operation
836 description: host or handle not found
840 summary: Create a user
849 description: user created
853 $ref: '#/components/schemas/AddUserResponse'
859 id: '$response.body#/user/id'
864 id: '$response.body#/user/id'
869 id: '$response.body#/user/id'
871 description: insufficient authority to create an admin or moderator
876 $ref: '#/components/schemas/AddUser'
878 If the smtp server is configured, you can leave the password empty and an email will be sent
879 asking the user to set it first.
883 operationId: getUsers
890 - $ref: '#/components/parameters/usersSearch'
891 - $ref: '#/components/parameters/usersBlocked'
892 - $ref: '#/components/parameters/start'
893 - $ref: '#/components/parameters/count'
894 - $ref: '#/components/parameters/usersSort'
897 description: successful operation
903 $ref: '#/components/schemas/User'
907 - $ref: '#/components/parameters/id'
909 summary: Delete a user
918 description: successful operation
929 description: include statistics about the user (only available as a moderator/admin)
934 x-summary: successful operation
936 As an admin/moderator, you can request a response augmented with statistics about the user's
937 moderation relations and videos usage, by using the `withStats` parameter.
942 - $ref: '#/components/schemas/User'
943 - $ref: '#/components/schemas/UserWithStats'
945 summary: Update a user
953 description: successful operation
958 $ref: '#/components/schemas/UpdateUser'
961 /oauth-clients/local:
963 summary: Login prerequisite
964 description: You need to retrieve a client id and secret before [logging in](#operation/getOAuthToken).
965 operationId: getOAuthClient
970 description: successful operation
974 $ref: '#/components/schemas/OAuthClient'
976 UseOAuthClientToLogin:
977 operationId: getOAuthToken
979 client_id: '$response.body#/client_id'
980 client_secret: '$response.body#/client_secret'
984 API="https://peertube2.cpy.re/api/v1"
987 curl -s "$API/oauth-clients/local"
992 operationId: getOAuthToken
993 description: With your [client id and secret](#operation/getOAuthClient), you can retrieve an access and refresh tokens.
998 application/x-www-form-urlencoded:
1001 - $ref: '#/components/schemas/OAuthToken-password'
1002 - $ref: '#/components/schemas/OAuthToken-refresh_token'
1004 propertyName: grant_type
1006 password: '#/components/schemas/OAuthToken-password'
1007 refresh_token: '#/components/schemas/OAuthToken-refresh_token'
1010 description: successful operation
1021 example: 90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0
1022 description: valid for 1 day
1025 example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
1026 description: valid for 2 weeks
1031 refresh_token_expires_in:
1036 x-summary: client or credentials are invalid
1038 Disambiguate via `type`:
1039 - `invalid_client` for an unmatched `client_id`
1040 - `invalid_grant` for unmatched credentials
1042 x-summary: token expired
1044 Disambiguate via `type`:
1045 - default value for a regular authentication failure
1046 - `invalid_token` for an expired token
1051 API="https://peertube2.cpy.re/api/v1"
1052 USERNAME="<your_username>"
1053 PASSWORD="<your_password>"
1056 client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
1057 client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
1058 curl -s "$API/users/token" \
1059 --data client_id="$client_id" \
1060 --data client_secret="$client_secret" \
1061 --data grant_type=password \
1062 --data username="$USERNAME" \
1063 --data password="$PASSWORD" \
1064 | jq -r ".access_token"
1066 /users/revoke-token:
1069 description: Revokes your access token and its associated refresh token, destroying your current session.
1070 operationId: revokeOAuthToken
1077 description: successful operation
1081 summary: Register a user
1082 operationId: registerUser
1088 description: successful operation
1093 $ref: '#/components/schemas/RegisterUser'
1096 /users/{id}/verify-email:
1098 summary: Verify a user
1099 operationId: verifyUser
1101 Following a user registration, the new user will receive an email asking to click a link
1102 containing a secret.
1107 - $ref: '#/components/parameters/id'
1120 - verificationString
1123 description: successful operation
1125 description: invalid verification string
1127 description: user not found
1129 /users/ask-send-verify-email:
1131 summary: Resend user verification link
1132 operationId: resendEmailToVerifyUser
1138 description: successful operation
1142 summary: Get my user information
1143 operationId: getUserInfo
1151 description: successful operation
1157 $ref: '#/components/schemas/User'
1159 summary: Update my user information
1160 operationId: putUserInfo
1168 description: successful operation
1173 $ref: '#/components/schemas/UpdateMe'
1176 /users/me/videos/imports:
1178 summary: Get video imports of my user
1186 - $ref: '#/components/parameters/start'
1187 - $ref: '#/components/parameters/count'
1188 - $ref: '#/components/parameters/sort'
1193 description: Filter on import target URL
1197 name: videoChannelSyncId
1200 description: Filter on imports created by a specific channel synchronization
1207 description: Search in video names
1212 description: successful operation
1216 $ref: '#/components/schemas/VideoImportsList'
1218 /users/me/video-quota-used:
1220 summary: Get my user used quota
1228 description: successful operation
1236 description: The user video quota used so far in bytes
1237 example: 16810141515
1238 videoQuotaUsedDaily:
1240 description: The user video quota used today in bytes
1243 '/users/me/videos/{videoId}/rating':
1245 summary: Get rate of my user for a video
1255 description: The video id
1257 $ref: '#/components/schemas/Video/properties/id'
1260 description: successful operation
1264 $ref: '#/components/schemas/GetMeVideoRating'
1268 summary: Get videos of my user
1276 - $ref: '#/components/parameters/start'
1277 - $ref: '#/components/parameters/count'
1278 - $ref: '#/components/parameters/sort'
1281 description: successful operation
1285 $ref: '#/components/schemas/VideoListResponse'
1287 /users/me/subscriptions:
1289 summary: Get my user subscriptions
1296 - $ref: '#/components/parameters/start'
1297 - $ref: '#/components/parameters/count'
1298 - $ref: '#/components/parameters/sort'
1301 description: successful operation
1305 $ref: '#/components/schemas/VideoChannelList'
1309 summary: Add subscription to my user
1322 description: uri of the video channels to subscribe to
1328 uri: 008a0e54-375d-49d0-8379-143202e24152@video.lqdn.fr
1331 description: successful operation
1333 /users/me/subscriptions/exist:
1335 summary: Get if subscriptions exist for my user
1342 - $ref: '#/components/parameters/subscriptionsUris'
1345 description: successful operation
1351 /users/me/subscriptions/videos:
1353 summary: List videos of subscriptions of my user
1361 - $ref: '#/components/parameters/categoryOneOf'
1362 - $ref: '#/components/parameters/isLive'
1363 - $ref: '#/components/parameters/tagsOneOf'
1364 - $ref: '#/components/parameters/tagsAllOf'
1365 - $ref: '#/components/parameters/licenceOneOf'
1366 - $ref: '#/components/parameters/languageOneOf'
1367 - $ref: '#/components/parameters/nsfw'
1368 - $ref: '#/components/parameters/isLocal'
1369 - $ref: '#/components/parameters/include'
1370 - $ref: '#/components/parameters/privacyOneOf'
1371 - $ref: '#/components/parameters/hasHLSFiles'
1372 - $ref: '#/components/parameters/hasWebtorrentFiles'
1373 - $ref: '#/components/parameters/skipCount'
1374 - $ref: '#/components/parameters/start'
1375 - $ref: '#/components/parameters/count'
1376 - $ref: '#/components/parameters/videosSort'
1379 description: successful operation
1383 $ref: '#/components/schemas/VideoListResponse'
1385 '/users/me/subscriptions/{subscriptionHandle}':
1387 summary: Get subscription of my user
1394 - $ref: '#/components/parameters/subscriptionHandle'
1397 description: successful operation
1401 $ref: '#/components/schemas/VideoChannel'
1403 summary: Delete subscription of my user
1410 - $ref: '#/components/parameters/subscriptionHandle'
1413 description: successful operation
1415 /users/me/notifications:
1417 summary: List my notifications
1425 description: only list unread notifications
1428 - $ref: '#/components/parameters/start'
1429 - $ref: '#/components/parameters/count'
1430 - $ref: '#/components/parameters/sort'
1433 description: successful operation
1437 $ref: '#/components/schemas/NotificationListResponse'
1439 /users/me/notifications/read:
1441 summary: Mark notifications as read by their id
1454 description: ids of the notifications to mark as read
1461 description: successful operation
1463 /users/me/notifications/read-all:
1465 summary: Mark all my notification as read
1472 description: successful operation
1474 /users/me/notification-settings:
1476 summary: Update my notification settings
1487 newVideoFromSubscription:
1488 $ref: '#/components/schemas/NotificationSettingValue'
1489 newCommentOnMyVideo:
1490 $ref: '#/components/schemas/NotificationSettingValue'
1492 $ref: '#/components/schemas/NotificationSettingValue'
1493 videoAutoBlacklistAsModerator:
1494 $ref: '#/components/schemas/NotificationSettingValue'
1496 $ref: '#/components/schemas/NotificationSettingValue'
1498 $ref: '#/components/schemas/NotificationSettingValue'
1499 myVideoImportFinished:
1500 $ref: '#/components/schemas/NotificationSettingValue'
1502 $ref: '#/components/schemas/NotificationSettingValue'
1503 newUserRegistration:
1504 $ref: '#/components/schemas/NotificationSettingValue'
1506 $ref: '#/components/schemas/NotificationSettingValue'
1507 newInstanceFollower:
1508 $ref: '#/components/schemas/NotificationSettingValue'
1509 autoInstanceFollowing:
1510 $ref: '#/components/schemas/NotificationSettingValue'
1513 description: successful operation
1515 /users/me/history/videos:
1517 summary: List watched videos history
1523 - $ref: '#/components/parameters/start'
1524 - $ref: '#/components/parameters/count'
1525 - $ref: '#/components/parameters/search'
1528 description: successful operation
1532 $ref: '#/components/schemas/VideoListResponse'
1534 /users/me/history/videos/{videoId}:
1536 summary: Delete history element
1546 $ref: '#/components/schemas/Video/properties/id'
1549 description: successful operation
1551 /users/me/history/videos/remove:
1553 summary: Clear video history
1560 multipart/form-data:
1565 description: history before this date will be deleted
1570 description: successful operation
1572 /users/me/avatar/pick:
1574 summary: Update my user avatar
1581 description: successful operation
1590 $ref: '#/components/schemas/ActorImage'
1592 description: image file too large
1594 X-File-Maximum-Size:
1598 description: Maximum file size for the avatar
1601 multipart/form-data:
1606 description: The file to upload
1611 contentType: image/png, image/jpeg
1615 summary: Delete my avatar
1622 description: successful operation
1626 summary: List video ownership changes
1628 - Video Ownership Change
1633 description: successful operation
1635 '/videos/ownership/{id}/accept':
1637 summary: Accept ownership change request
1639 - Video Ownership Change
1643 - $ref: '#/components/parameters/idOrUUID'
1646 description: successful operation
1648 description: cannot terminate an ownership change of another user
1650 description: video ownership change not found
1652 '/videos/ownership/{id}/refuse':
1654 summary: Refuse ownership change request
1656 - Video Ownership Change
1660 - $ref: '#/components/parameters/idOrUUID'
1663 description: successful operation
1665 description: cannot terminate an ownership change of another user
1667 description: video ownership change not found
1669 '/videos/{id}/give-ownership':
1671 summary: Request ownership change
1673 - Video Ownership Change
1677 - $ref: '#/components/parameters/idOrUUID'
1681 application/x-www-form-urlencoded:
1691 description: successful operation
1693 description: changing video ownership to a remote account is not supported yet
1695 description: video not found
1697 /videos/{id}/studio/edit:
1699 summary: Create a studio task
1703 description: Create a task to edit a video (cut, add intro/outro etc)
1707 - $ref: '#/components/parameters/idOrUUID'
1711 application/x-www-form-urlencoded:
1713 $ref: '#/components/schemas/VideoStudioCreateTask'
1716 description: successful operation
1718 description: incorrect parameters
1720 description: video not found
1724 summary: List videos
1725 operationId: getVideos
1729 - $ref: '#/components/parameters/categoryOneOf'
1730 - $ref: '#/components/parameters/isLive'
1731 - $ref: '#/components/parameters/tagsOneOf'
1732 - $ref: '#/components/parameters/tagsAllOf'
1733 - $ref: '#/components/parameters/licenceOneOf'
1734 - $ref: '#/components/parameters/languageOneOf'
1735 - $ref: '#/components/parameters/nsfw'
1736 - $ref: '#/components/parameters/isLocal'
1737 - $ref: '#/components/parameters/include'
1738 - $ref: '#/components/parameters/privacyOneOf'
1739 - $ref: '#/components/parameters/hasHLSFiles'
1740 - $ref: '#/components/parameters/hasWebtorrentFiles'
1741 - $ref: '#/components/parameters/skipCount'
1742 - $ref: '#/components/parameters/start'
1743 - $ref: '#/components/parameters/count'
1744 - $ref: '#/components/parameters/videosSort'
1747 description: successful operation
1751 $ref: '#/components/schemas/VideoListResponse'
1755 summary: List available video categories
1756 operationId: getCategories
1761 description: successful operation
1770 externalValue: https://peertube2.cpy.re/api/v1/videos/categories
1774 summary: List available video licences
1775 operationId: getLicences
1780 description: successful operation
1789 externalValue: https://peertube2.cpy.re/api/v1/videos/licences
1793 summary: List available video languages
1794 operationId: getLanguages
1799 description: successful operation
1808 externalValue: https://peertube2.cpy.re/api/v1/videos/languages
1812 summary: List available video privacy policies
1813 operationId: getPrivacyPolicies
1818 description: successful operation
1827 externalValue: https://peertube2.cpy.re/api/v1/videos/privacies
1831 summary: Update a video
1832 operationId: putVideo
1838 - $ref: '#/components/parameters/idOrUUID'
1841 description: successful operation
1844 multipart/form-data:
1849 description: Video thumbnail file
1853 description: Video preview file
1857 $ref: '#/components/schemas/VideoCategorySet'
1859 $ref: '#/components/schemas/VideoLicenceSet'
1861 $ref: '#/components/schemas/VideoLanguageSet'
1863 $ref: '#/components/schemas/VideoPrivacySet'
1865 description: Video description
1868 description: Whether or not we wait transcoding before publish the video
1871 description: A text tell the audience how to support the video creator
1872 example: Please support our work on https://soutenir.framasoft.org/en/ <3
1875 description: Whether or not this video contains sensitive content
1878 description: Video name
1883 description: Video tags (maximum 5 tags each between 2 and 30 characters)
1892 description: Enable or disable comments for this video
1895 description: Enable or disable downloading for this video
1897 originallyPublishedAt:
1898 description: Date when the content was originally published
1902 $ref: '#/components/schemas/VideoScheduledUpdate'
1905 contentType: image/jpeg
1907 contentType: image/jpeg
1909 summary: Get a video
1910 operationId: getVideo
1914 - $ref: '#/components/parameters/idOrUUID'
1917 description: successful operation
1921 $ref: '#/components/schemas/VideoDetails'
1923 summary: Delete a video
1924 operationId: delVideo
1930 - $ref: '#/components/parameters/idOrUUID'
1933 description: successful operation
1935 '/videos/{id}/description':
1937 summary: Get complete video description
1938 operationId: getVideoDesc
1942 - $ref: '#/components/parameters/idOrUUID'
1945 description: successful operation
1954 **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**
1956 '/videos/{id}/source':
1958 summary: Get video source file metadata
1959 operationId: getVideoSource
1963 - $ref: '#/components/parameters/idOrUUID'
1966 description: successful operation
1970 $ref: '#/components/schemas/VideoSource'
1972 '/videos/{id}/views':
1974 summary: Notify user is watching a video
1975 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.
1976 operationId: addView
1980 - $ref: '#/components/parameters/idOrUUID'
1985 $ref: '#/components/schemas/UserViewingVideo'
1989 description: successful operation
1991 '/videos/{id}/watching':
1993 summary: Set watching progress of a video
1995 description: This endpoint has been deprecated. Use `/videos/{id}/views` instead
2001 - $ref: '#/components/parameters/idOrUUID'
2006 $ref: '#/components/schemas/UserViewingVideo'
2010 description: successful operation
2012 '/videos/{id}/stats/overall':
2014 summary: Get overall stats of a video
2020 - $ref: '#/components/parameters/idOrUUID'
2023 description: Filter stats by start date
2029 description: Filter stats by end date
2035 description: successful operation
2039 $ref: '#/components/schemas/VideoStatsOverall'
2041 '/videos/{id}/stats/retention':
2043 summary: Get retention stats of a video
2049 - $ref: '#/components/parameters/idOrUUID'
2052 description: successful operation
2056 $ref: '#/components/schemas/VideoStatsRetention'
2058 '/videos/{id}/stats/timeseries/{metric}':
2060 summary: Get timeserie stats of a video
2066 - $ref: '#/components/parameters/idOrUUID'
2071 description: The metric to get
2076 - 'aggregateWatchTime'
2079 description: Filter stats by start date
2085 description: Filter stats by end date
2091 description: successful operation
2095 $ref: '#/components/schemas/VideoStatsTimeserie'
2099 summary: Upload a video
2100 description: Uses a single request to upload a video.
2101 operationId: uploadLegacy
2109 description: successful operation
2113 $ref: '#/components/schemas/VideoUploadResponse'
2115 description: video didn't pass upload filter
2117 description: upload has timed out
2119 x-summary: video file too large, due to quota or max body size limit set by the reverse-proxy
2121 If the response has no body, it means the reverse-proxy didn't let it through. Otherwise disambiguate via `type`:
2122 - `quota_reached` for quota limits whether daily or global
2124 X-File-Maximum-Size:
2128 description: Maximum file size for the video
2130 description: video type unsupported
2132 description: video unreadable
2135 multipart/form-data:
2137 $ref: '#/components/schemas/VideoUploadRequestLegacy'
2140 contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream
2142 contentType: image/jpeg
2144 contentType: image/jpeg
2149 USERNAME="<your_username>"
2150 PASSWORD="<your_password>"
2151 FILE_PATH="<your_file_path>"
2152 CHANNEL_ID="<your_channel_id>"
2154 API="https://peertube2.cpy.re/api/v1"
2157 client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
2158 client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
2159 token=$(curl -s "$API/users/token" \
2160 --data client_id="$client_id" \
2161 --data client_secret="$client_secret" \
2162 --data grant_type=password \
2163 --data username="$USERNAME" \
2164 --data password="$PASSWORD" \
2165 | jq -r ".access_token")
2168 curl -s "$API/videos/upload" \
2169 -H "Authorization: Bearer $token" \
2171 --form videofile=@"$FILE_PATH" \
2172 --form channelId=$CHANNEL_ID \
2175 /videos/upload-resumable:
2177 summary: Initialize the resumable upload of a video
2178 description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to initialize the upload of a video
2179 operationId: uploadResumableInit
2186 - name: X-Upload-Content-Length
2192 description: Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.
2193 - name: X-Upload-Content-Type
2200 description: MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.
2205 $ref: '#/components/schemas/VideoUploadRequestResumable'
2208 description: file already exists, send a [`resume`](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) request instead
2210 description: created
2216 example: /api/v1/videos/upload-resumable?upload_id=471e97554f21dec3b8bb5d4602939c51
2222 x-summary: video file too large, due to quota, absolute max file size or concurrent partial upload limit
2224 Disambiguate via `type`:
2225 - `max_file_size_reached` for the absolute file size limit
2226 - `quota_reached` for quota limits whether daily or global
2228 description: video type unsupported
2230 summary: Send chunk for the resumable upload of a video
2231 description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to continue, pause or resume the upload of a video
2232 operationId: uploadResumable
2243 Created session id to proceed with. If you didn't send chunks in the last hour, it is
2244 not valid anymore and you need to initialize a new upload.
2247 - name: Content-Range
2251 example: bytes 0-262143/2469036
2254 Specifies the bytes in the file that the request is uploading.
2256 For example, a value of `bytes 0-262143/1000000` shows that the request is sending the first
2257 262144 bytes (256 x 1024) in a 2,469,036 byte file.
2258 - name: Content-Length
2265 Size of the chunk that the request is sending.
2267 Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from
2268 1048576 bytes (~1MB) and increases or reduces size depending on connection health.
2271 application/octet-stream:
2277 description: last chunk received
2285 $ref: '#/components/schemas/VideoUploadResponse'
2287 description: resume incomplete
2292 example: bytes=0-262143
2298 description: video didn't pass upload filter
2300 description: upload not found
2302 description: chunk doesn't match range
2304 description: video unreadable
2306 description: too many concurrent requests
2308 description: upload is already being processed
2315 summary: Cancel the resumable upload of a video, deleting any data uploaded so far
2316 description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to cancel the upload of a video
2317 operationId: uploadResumableCancel
2328 Created session id to proceed with. If you didn't send chunks in the last 12 hours, it is
2329 not valid anymore and the upload session has already been deleted with its data ;-)
2332 - name: Content-Length
2340 description: upload cancelled
2347 description: upload not found
2351 summary: Import a video
2352 description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
2353 operationId: importVideo
2361 multipart/form-data:
2363 $ref: '#/components/schemas/VideoCreateImport'
2366 contentType: application/x-bittorrent
2368 contentType: image/jpeg
2370 contentType: image/jpeg
2373 description: successful operation
2377 $ref: '#/components/schemas/VideoUploadResponse'
2379 description: '`magnetUri` or `targetUrl` or a torrent file missing'
2381 description: video didn't pass pre-import filter
2383 description: HTTP or Torrent/magnetURI import not enabled
2385 /videos/imports/{id}/cancel:
2387 summary: Cancel video import
2388 description: Cancel a pending video import
2394 - $ref: '#/components/parameters/id'
2397 description: successful operation
2399 /videos/imports/{id}:
2401 summary: Delete video import
2402 description: Delete ended video import
2408 - $ref: '#/components/parameters/id'
2411 description: successful operation
2415 summary: Create a live
2416 operationId: addLive
2424 description: successful operation
2428 $ref: '#/components/schemas/VideoUploadResponse'
2430 x-summary: validation error, or conflicting `saveReplay` and `permanentLive` parameter set
2432 Disambiguate via `type`:
2433 - default type for a validation error
2434 - `live_conflicting_permanent_and_save_replay` for conflicting parameters set
2436 x-summary: live is not enabled, allow replay is not enabled, or max instance/user live videos limit is exceeded
2438 Disambiguate via `type`:
2439 - `live_not_enabled` for a disabled live feature
2440 - `live_not_allowing_replay` for a disabled replay feature
2441 - `max_instance_lives_limit_reached` for the absolute concurrent live limit
2442 - `max_user_lives_limit_reached` for the user concurrent live limit
2445 multipart/form-data:
2450 description: Channel id that will contain this live video
2455 description: User can stream multiple times in a permanent live
2458 description: User can select live latency mode if enabled by the instance
2459 $ref: '#/components/schemas/LiveVideoLatencyMode'
2461 description: Live video/replay thumbnail file
2465 description: Live video/replay preview file
2469 $ref: '#/components/schemas/VideoPrivacySet'
2471 $ref: '#/components/schemas/VideoCategorySet'
2473 $ref: '#/components/schemas/VideoLicenceSet'
2475 $ref: '#/components/schemas/VideoLanguageSet'
2477 description: Live video/replay description
2480 description: A text tell the audience how to support the creator
2481 example: Please support our work on https://soutenir.framasoft.org/en/ <3
2484 description: Whether or not this live video/replay contains sensitive content
2487 description: Live video/replay name
2492 description: Live video/replay tags (maximum 5 tags each between 2 and 30 characters)
2501 description: Enable or disable comments for this live video/replay
2504 description: Enable or disable downloading for the replay of this live video
2511 contentType: image/jpeg
2513 contentType: image/jpeg
2517 summary: Get information about a live
2518 operationId: getLiveId
2525 - $ref: '#/components/parameters/idOrUUID'
2528 description: successful operation
2532 $ref: '#/components/schemas/LiveVideoResponse'
2534 summary: Update information about a live
2535 operationId: updateLiveId
2542 - $ref: '#/components/parameters/idOrUUID'
2547 $ref: '#/components/schemas/LiveVideoUpdate'
2550 description: successful operation
2552 description: bad parameters or trying to update a live that has already started
2554 description: trying to save replay of the live but saving replay is not enabled on the instance
2555 /videos/live/{id}/sessions:
2557 summary: List live sessions
2558 description: List all sessions created in a particular live
2564 - $ref: '#/components/parameters/idOrUUID'
2567 description: successful operation
2579 $ref: '#/components/schemas/LiveVideoSessionResponse'
2580 /videos/{id}/live-session:
2582 summary: Get live session of a replay
2583 description: If the video is a replay of a live, you can find the associated live session using this endpoint
2589 - $ref: '#/components/parameters/idOrUUID'
2592 description: successful operation
2596 $ref: '#/components/schemas/LiveVideoSessionResponse'
2600 summary: List my abuses
2601 operationId: getMyAbuses
2610 description: only list the report with this id
2616 $ref: '#/components/schemas/AbuseStateSet'
2617 - $ref: '#/components/parameters/abusesSort'
2618 - $ref: '#/components/parameters/start'
2619 - $ref: '#/components/parameters/count'
2622 description: successful operation
2634 $ref: '#/components/schemas/Abuse'
2638 summary: List abuses
2639 operationId: getAbuses
2649 description: only list the report with this id
2652 - name: predefinedReason
2654 description: predefined reason the listed reports should contain
2656 $ref: '#/components/schemas/PredefinedAbuseReasons'
2659 description: plain search that will match with video titles, reporter names and more
2665 $ref: '#/components/schemas/AbuseStateSet'
2666 - name: searchReporter
2668 description: only list reports of a specific reporter
2671 - name: searchReportee
2672 description: only list reports of a specific reportee
2678 description: only list reports of a specific video
2681 - name: searchVideoChannel
2683 description: only list reports of a specific video channel
2688 description: only list deleted or blocklisted videos
2696 description: only list account, comment or video reports
2703 - $ref: '#/components/parameters/start'
2704 - $ref: '#/components/parameters/count'
2705 - $ref: '#/components/parameters/abusesSort'
2708 description: successful operation
2720 $ref: '#/components/schemas/Abuse'
2722 summary: Report an abuse
2735 description: Reason why the user reports this video
2740 $ref: '#/components/schemas/PredefinedAbuseReasons'
2745 description: Video id to report
2747 - $ref: '#/components/schemas/Video/properties/id'
2751 description: Timestamp in the video that marks the beginning of the report
2756 description: Timestamp in the video that marks the ending of the report
2762 description: Comment id to report
2764 - $ref: '#/components/schemas/VideoComment/properties/id'
2769 description: Account id to report
2775 description: successful operation
2785 $ref: '#/components/schemas/id'
2787 description: incorrect request parameters
2789 '/abuses/{abuseId}':
2791 summary: Update an abuse
2799 - $ref: '#/components/parameters/abuseId'
2807 $ref: '#/components/schemas/AbuseStateSet'
2810 description: Update the report comment visible only to the moderation team
2815 description: successful operation
2817 description: abuse not found
2821 summary: Delete an abuse
2827 - $ref: '#/components/parameters/abuseId'
2830 description: successful operation
2832 description: block not found
2834 '/abuses/{abuseId}/messages':
2836 summary: List messages of an abuse
2842 - $ref: '#/components/parameters/abuseId'
2845 description: successful operation
2857 $ref: '#/components/schemas/AbuseMessage'
2859 summary: Add message to an abuse
2865 - $ref: '#/components/parameters/abuseId'
2874 description: Message to send
2882 description: successful operation
2884 description: incorrect request parameters
2886 '/abuses/{abuseId}/messages/{abuseMessageId}':
2888 summary: Delete an abuse message
2894 - $ref: '#/components/parameters/abuseId'
2895 - $ref: '#/components/parameters/abuseMessageId'
2898 description: successful operation
2900 '/videos/{id}/blacklist':
2902 summary: Block a video
2903 operationId: addVideoBlock
2911 - $ref: '#/components/parameters/idOrUUID'
2914 description: successful operation
2916 summary: Unblock a video by its id
2917 operationId: delVideoBlock
2925 - $ref: '#/components/parameters/idOrUUID'
2928 description: successful operation
2930 description: block not found
2936 summary: List video blocks
2937 operationId: getVideoBlocks
2946 list only blocks that match this type:
2950 - `2`: automatic block that needs review
2958 description: plain search that will match with video titles, and more
2961 - $ref: '#/components/parameters/start'
2962 - $ref: '#/components/parameters/count'
2963 - $ref: '#/components/parameters/blacklistsSort'
2966 description: successful operation
2978 $ref: '#/components/schemas/VideoBlacklist'
2980 /videos/{id}/captions:
2982 summary: List captions of a video
2983 operationId: getVideoCaptions
2987 - $ref: '#/components/parameters/idOrUUID'
2990 description: successful operation
3002 $ref: '#/components/schemas/VideoCaption'
3004 /videos/{id}/captions/{captionLanguage}:
3006 summary: Add or replace a video caption
3007 operationId: addVideoCaption
3014 - $ref: '#/components/parameters/idOrUUID'
3015 - $ref: '#/components/parameters/captionLanguage'
3018 multipart/form-data:
3023 description: The file to upload.
3028 contentType: text/vtt, application/x-subrip, text/plain
3031 description: successful operation
3033 description: video or language not found
3035 summary: Delete a video caption
3036 operationId: delVideoCaption
3043 - $ref: '#/components/parameters/idOrUUID'
3044 - $ref: '#/components/parameters/captionLanguage'
3047 description: successful operation
3049 description: video or language or caption for that language not found
3053 summary: List video channels
3054 operationId: getVideoChannels
3058 - $ref: '#/components/parameters/start'
3059 - $ref: '#/components/parameters/count'
3060 - $ref: '#/components/parameters/sort'
3063 description: successful operation
3067 $ref: '#/components/schemas/VideoChannelList'
3069 summary: Create a video channel
3070 operationId: addVideoChannel
3077 description: successful operation
3087 $ref: '#/components/schemas/id'
3092 $ref: '#/components/schemas/VideoChannelCreate'
3094 '/video-channels/{channelHandle}':
3096 summary: Get a video channel
3097 operationId: getVideoChannel
3101 - $ref: '#/components/parameters/channelHandle'
3104 description: successful operation
3108 $ref: '#/components/schemas/VideoChannel'
3110 summary: Update a video channel
3111 operationId: putVideoChannel
3117 - $ref: '#/components/parameters/channelHandle'
3120 description: successful operation
3125 $ref: '#/components/schemas/VideoChannelUpdate'
3127 summary: Delete a video channel
3128 operationId: delVideoChannel
3134 - $ref: '#/components/parameters/channelHandle'
3137 description: successful operation
3139 '/video-channels/{channelHandle}/videos':
3141 summary: List videos of a video channel
3142 operationId: getVideoChannelVideos
3147 - $ref: '#/components/parameters/channelHandle'
3148 - $ref: '#/components/parameters/categoryOneOf'
3149 - $ref: '#/components/parameters/isLive'
3150 - $ref: '#/components/parameters/tagsOneOf'
3151 - $ref: '#/components/parameters/tagsAllOf'
3152 - $ref: '#/components/parameters/licenceOneOf'
3153 - $ref: '#/components/parameters/languageOneOf'
3154 - $ref: '#/components/parameters/nsfw'
3155 - $ref: '#/components/parameters/isLocal'
3156 - $ref: '#/components/parameters/include'
3157 - $ref: '#/components/parameters/privacyOneOf'
3158 - $ref: '#/components/parameters/hasHLSFiles'
3159 - $ref: '#/components/parameters/hasWebtorrentFiles'
3160 - $ref: '#/components/parameters/skipCount'
3161 - $ref: '#/components/parameters/start'
3162 - $ref: '#/components/parameters/count'
3163 - $ref: '#/components/parameters/videosSort'
3166 description: successful operation
3170 $ref: '#/components/schemas/VideoListResponse'
3172 '/video-channels/{channelHandle}/followers':
3176 summary: 'List followers of a video channel'
3179 operationId: getVideoChannelFollowers
3181 - $ref: '#/components/parameters/channelHandle'
3182 - $ref: '#/components/parameters/start'
3183 - $ref: '#/components/parameters/count'
3184 - $ref: '#/components/parameters/followersSort'
3185 - $ref: '#/components/parameters/search'
3188 description: successful operation
3200 $ref: '#/components/schemas/Follow'
3202 '/video-channels/{channelHandle}/avatar/pick':
3204 summary: Update channel avatar
3210 - $ref: '#/components/parameters/channelHandle'
3213 description: successful operation
3222 $ref: '#/components/schemas/ActorImage'
3224 description: image file too large
3226 X-File-Maximum-Size:
3230 description: Maximum file size for the avatar
3233 multipart/form-data:
3238 description: The file to upload.
3243 contentType: image/png, image/jpeg
3245 '/video-channels/{channelHandle}/avatar':
3247 summary: Delete channel avatar
3253 - $ref: '#/components/parameters/channelHandle'
3256 description: successful operation
3258 '/video-channels/{channelHandle}/banner/pick':
3260 summary: Update channel banner
3266 - $ref: '#/components/parameters/channelHandle'
3269 description: successful operation
3278 $ref: '#/components/schemas/ActorImage'
3280 description: image file too large
3282 X-File-Maximum-Size:
3286 description: Maximum file size for the banner
3289 multipart/form-data:
3294 description: The file to upload.
3299 contentType: image/png, image/jpeg
3301 '/video-channels/{channelHandle}/banner':
3303 summary: Delete channel banner
3309 - $ref: '#/components/parameters/channelHandle'
3312 description: successful operation
3314 '/video-channels/{channelHandle}/import-videos':
3316 summary: Import videos in channel
3317 description: Import a remote channel/playlist videos into a channel
3324 - $ref: '#/components/parameters/channelHandle'
3329 $ref: '#/components/schemas/ImportVideosInChannelCreate'
3332 description: successful operation
3334 '/video-channel-syncs':
3336 summary: Create a synchronization for a video channel
3337 operationId: addVideoChannelSync
3346 $ref: '#/components/schemas/VideoChannelSyncCreate'
3349 description: successful operation
3356 $ref: "#/components/schemas/VideoChannelSync"
3358 '/video-channel-syncs/{channelSyncId}':
3360 summary: Delete a video channel synchronization
3361 operationId: delVideoChannelSync
3367 - $ref: '#/components/parameters/channelSyncId'
3370 description: successful operation
3372 '/video-channel-syncs/{channelSyncId}/sync':
3374 summary: Triggers the channel synchronization job, fetching all the videos from the remote channel
3375 operationId: triggerVideoChannelSync
3381 - $ref: '#/components/parameters/channelSyncId'
3384 description: successful operation
3387 /video-playlists/privacies:
3389 summary: List available playlist privacy policies
3390 operationId: getPlaylistPrivacyPolicies
3395 description: successful operation
3404 externalValue: https://peertube2.cpy.re/api/v1/video-playlists/privacies
3408 summary: List video playlists
3409 operationId: getPlaylists
3413 - $ref: '#/components/parameters/start'
3414 - $ref: '#/components/parameters/count'
3415 - $ref: '#/components/parameters/sort'
3418 description: successful operation
3430 $ref: '#/components/schemas/VideoPlaylist'
3432 summary: Create a video playlist
3433 description: If the video playlist is set as public, `videoChannelId` is mandatory.
3434 operationId: addPlaylist
3441 description: successful operation
3451 $ref: '#/components/schemas/VideoPlaylist/properties/id'
3453 $ref: '#/components/schemas/VideoPlaylist/properties/uuid'
3455 $ref: '#/components/schemas/VideoPlaylist/properties/shortUUID'
3458 multipart/form-data:
3463 description: Video playlist display name
3468 description: Video playlist thumbnail file
3472 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
3474 description: Video playlist description
3480 - $ref: '#/components/schemas/id'
3481 description: Video channel in which the playlist will be published
3486 contentType: image/jpeg
3488 /video-playlists/{playlistId}:
3490 summary: Get a video playlist
3494 - $ref: '#/components/parameters/playlistId'
3497 description: successful operation
3501 $ref: '#/components/schemas/VideoPlaylist'
3503 summary: Update a video playlist
3504 description: 'If the video playlist is set as public, the playlist must have a assigned channel.'
3511 description: successful operation
3513 - $ref: '#/components/parameters/playlistId'
3516 multipart/form-data:
3521 description: Video playlist display name
3526 description: Video playlist thumbnail file
3530 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
3532 description: Video playlist description
3536 - $ref: '#/components/schemas/id'
3537 description: Video channel in which the playlist will be published
3540 contentType: image/jpeg
3542 summary: Delete a video playlist
3548 - $ref: '#/components/parameters/playlistId'
3551 description: successful operation
3553 /video-playlists/{playlistId}/videos:
3555 summary: 'List videos of a playlist'
3556 operationId: getVideoPlaylistVideos
3561 - $ref: '#/components/parameters/playlistId'
3562 - $ref: '#/components/parameters/start'
3563 - $ref: '#/components/parameters/count'
3566 description: successful operation
3570 $ref: '#/components/schemas/VideoListResponse'
3572 summary: Add a video in a playlist
3573 operationId: addVideoPlaylistVideo
3580 - $ref: '#/components/parameters/playlistId'
3583 description: successful operation
3589 videoPlaylistElement:
3603 - $ref: '#/components/schemas/Video/properties/uuid'
3604 - $ref: '#/components/schemas/Video/properties/id'
3605 description: Video to add in the playlist
3609 description: Start the video at this specific timestamp
3613 description: Stop the video at this specific timestamp
3617 /video-playlists/{playlistId}/videos/reorder:
3619 summary: 'Reorder a playlist'
3620 operationId: reorderVideoPlaylist
3626 - $ref: '#/components/parameters/playlistId'
3629 description: successful operation
3638 description: 'Start position of the element to reorder'
3640 insertAfterPosition:
3642 description: 'New position for the block to reorder, to add the block before the first element'
3646 description: 'How many element from `startPosition` to reorder'
3650 - insertAfterPosition
3652 /video-playlists/{playlistId}/videos/{playlistElementId}:
3654 summary: Update a playlist element
3655 operationId: putVideoPlaylistVideo
3661 - $ref: '#/components/parameters/playlistId'
3662 - $ref: '#/components/parameters/playlistElementId'
3665 description: successful operation
3675 description: Start the video at this specific timestamp
3679 description: Stop the video at this specific timestamp
3681 summary: Delete an element from a playlist
3682 operationId: delVideoPlaylistVideo
3688 - $ref: '#/components/parameters/playlistId'
3689 - $ref: '#/components/parameters/playlistElementId'
3692 description: successful operation
3694 '/users/me/video-playlists/videos-exist':
3696 summary: Check video exists in my playlists
3705 description: The video ids to check
3709 $ref: '#/components/schemas/Video/properties/id'
3712 description: successful operation
3734 '/accounts/{name}/video-channels':
3736 summary: List video channels of an account
3741 - $ref: '#/components/parameters/name'
3744 description: include daily view statistics for the last 30 days and total views (only if authentified as the account user)
3747 - $ref: '#/components/parameters/start'
3748 - $ref: '#/components/parameters/count'
3749 - $ref: '#/components/parameters/sort'
3752 description: successful operation
3756 $ref: '#/components/schemas/VideoChannelList'
3758 '/accounts/{name}/video-channel-syncs':
3760 summary: List the synchronizations of video channels of an account
3766 - $ref: '#/components/parameters/name'
3767 - $ref: '#/components/parameters/start'
3768 - $ref: '#/components/parameters/count'
3769 - $ref: '#/components/parameters/sort'
3772 description: successful operation
3776 $ref: '#/components/schemas/VideoChannelSyncList'
3778 '/accounts/{name}/ratings':
3780 summary: List ratings of an account
3786 - $ref: '#/components/parameters/name'
3787 - $ref: '#/components/parameters/start'
3788 - $ref: '#/components/parameters/count'
3789 - $ref: '#/components/parameters/sort'
3793 description: Optionally filter which ratings to retrieve
3801 description: successful operation
3807 $ref: '#/components/schemas/VideoRating'
3809 '/videos/{id}/comment-threads':
3811 summary: List threads of a video
3815 - $ref: '#/components/parameters/idOrUUID'
3816 - $ref: '#/components/parameters/start'
3817 - $ref: '#/components/parameters/count'
3818 - $ref: '#/components/parameters/commentsSort'
3821 description: successful operation
3825 $ref: '#/components/schemas/CommentThreadResponse'
3827 summary: Create a thread
3833 - $ref: '#/components/parameters/idOrUUID'
3836 description: successful operation
3840 $ref: '#/components/schemas/CommentThreadPostResponse'
3842 description: video does not exist
3851 - $ref: '#/components/schemas/VideoComment/properties/text'
3857 '/videos/{id}/comment-threads/{threadId}':
3859 summary: Get a thread
3863 - $ref: '#/components/parameters/idOrUUID'
3864 - $ref: '#/components/parameters/threadId'
3867 description: successful operation
3871 $ref: '#/components/schemas/VideoCommentThreadTree'
3873 '/videos/{id}/comments/{commentId}':
3875 summary: Reply to a thread of a video
3881 - $ref: '#/components/parameters/idOrUUID'
3882 - $ref: '#/components/parameters/commentId'
3885 description: successful operation
3889 $ref: '#/components/schemas/CommentThreadPostResponse'
3891 description: thread or video does not exist
3900 - $ref: '#/components/schemas/VideoComment/properties/text'
3906 summary: Delete a comment or a reply
3912 - $ref: '#/components/parameters/idOrUUID'
3913 - $ref: '#/components/parameters/commentId'
3916 description: successful operation
3918 description: cannot remove comment of another user
3920 description: comment or video does not exist
3922 description: comment is already deleted
3924 '/videos/{id}/rate':
3926 summary: Like/dislike a video
3932 - $ref: '#/components/parameters/idOrUUID'
3948 description: successful operation
3950 description: video does not exist
3954 summary: Delete video HLS files
3960 operationId: delVideoHLS
3962 - $ref: '#/components/parameters/idOrUUID'
3965 description: successful operation
3967 description: video does not exist
3968 '/videos/{id}/webtorrent':
3970 summary: Delete video WebTorrent files
3976 operationId: delVideoWebTorrent
3978 - $ref: '#/components/parameters/idOrUUID'
3981 description: successful operation
3983 description: video does not exist
3985 '/videos/{id}/transcoding':
3987 summary: Create a transcoding job
3993 operationId: createVideoTranscoding
3995 - $ref: '#/components/parameters/idOrUUID'
4011 description: successful operation
4013 description: video does not exist
4019 summary: Search videos
4020 operationId: searchVideos
4025 allowEmptyValue: false
4027 String to search. If the user can make a remote URI search, and the string is an URI then the
4028 PeerTube instance will fetch the remote object and add it to its database. Then,
4029 you can use the REST API to fetch the complete video information and interact with it.
4032 - $ref: '#/components/parameters/categoryOneOf'
4033 - $ref: '#/components/parameters/isLive'
4034 - $ref: '#/components/parameters/tagsOneOf'
4035 - $ref: '#/components/parameters/tagsAllOf'
4036 - $ref: '#/components/parameters/licenceOneOf'
4037 - $ref: '#/components/parameters/languageOneOf'
4038 - $ref: '#/components/parameters/nsfw'
4039 - $ref: '#/components/parameters/isLocal'
4040 - $ref: '#/components/parameters/include'
4041 - $ref: '#/components/parameters/privacyOneOf'
4042 - $ref: '#/components/parameters/hasHLSFiles'
4043 - $ref: '#/components/parameters/hasWebtorrentFiles'
4044 - $ref: '#/components/parameters/skipCount'
4045 - $ref: '#/components/parameters/start'
4046 - $ref: '#/components/parameters/count'
4047 - $ref: '#/components/parameters/searchTarget'
4048 - $ref: '#/components/parameters/videosSearchSort'
4051 description: Get videos that are published after this date
4057 description: Get videos that are published before this date
4061 - name: originallyPublishedStartDate
4063 description: Get videos that are originally published after this date
4067 - name: originallyPublishedEndDate
4069 description: Get videos that are originally published before this date
4075 description: Get videos that have this minimum duration
4080 description: Get videos that have this maximum duration
4084 'searchTarget === search-index':
4085 $ref: '#/components/callbacks/searchIndex'
4088 description: successful operation
4092 $ref: '#/components/schemas/VideoListResponse'
4094 description: search index unavailable
4096 /search/video-channels:
4100 summary: Search channels
4101 operationId: searchChannels
4107 String to search. If the user can make a remote URI search, and the string is an URI then the
4108 PeerTube instance will fetch the remote object and add it to its database. Then,
4109 you can use the REST API to fetch the complete channel information and interact with it.
4112 - $ref: '#/components/parameters/start'
4113 - $ref: '#/components/parameters/count'
4114 - $ref: '#/components/parameters/searchTarget'
4115 - $ref: '#/components/parameters/sort'
4117 'searchTarget === search-index':
4118 $ref: '#/components/callbacks/searchIndex'
4121 description: successful operation
4125 $ref: '#/components/schemas/VideoChannelList'
4127 description: search index unavailable
4129 /search/video-playlists:
4133 summary: Search playlists
4134 operationId: searchPlaylists
4140 String to search. If the user can make a remote URI search, and the string is an URI then the
4141 PeerTube instance will fetch the remote object and add it to its database. Then,
4142 you can use the REST API to fetch the complete playlist information and interact with it.
4145 - $ref: '#/components/parameters/start'
4146 - $ref: '#/components/parameters/count'
4147 - $ref: '#/components/parameters/searchTarget'
4148 - $ref: '#/components/parameters/sort'
4150 'searchTarget === search-index':
4151 $ref: '#/components/callbacks/searchIndex'
4154 description: successful operation
4166 $ref: '#/components/schemas/VideoPlaylist'
4168 description: search index unavailable
4175 summary: Get block status of accounts/hosts
4180 description: 'Check if these accounts are blocked'
4181 example: [ 'goofy@example.com', 'donald@example.com' ]
4189 description: 'Check if these hosts are blocked'
4190 example: [ 'example.com' ]
4197 description: successful operation
4201 $ref: '#/components/schemas/BlockStatus'
4203 /server/blocklist/accounts:
4207 summary: List account blocks
4212 - $ref: '#/components/parameters/start'
4213 - $ref: '#/components/parameters/count'
4214 - $ref: '#/components/parameters/sort'
4217 description: successful operation
4221 summary: Block an account
4233 example: chocobozzz@example.org
4234 description: account to block, in the form `username@domain`
4239 description: successful operation
4241 description: self-blocking forbidden
4243 '/server/blocklist/accounts/{accountName}':
4247 summary: Unblock an account by its handle
4255 description: account to unblock, in the form `username@domain`
4260 description: successful operation
4262 description: account or account block does not exist
4264 /server/blocklist/servers:
4268 summary: List server blocks
4273 - $ref: '#/components/parameters/start'
4274 - $ref: '#/components/parameters/count'
4275 - $ref: '#/components/parameters/sort'
4278 description: successful operation
4282 summary: Block a server
4295 description: server domain to block
4300 description: successful operation
4302 description: self-blocking forbidden
4304 '/server/blocklist/servers/{host}':
4308 summary: Unblock a server by its domain
4316 description: server domain to unblock
4322 description: successful operation
4324 description: account block does not exist
4326 /server/redundancy/{host}:
4329 - Instance Redundancy
4330 summary: Update a server redundancy policy
4338 description: server domain to mirror
4350 description: allow mirroring of the host's local videos
4355 description: successful operation
4357 description: server is not already known
4359 /server/redundancy/videos:
4363 summary: List videos being mirrored
4364 operationId: getMirroredVideos
4372 description: direction of the mirror
4378 - $ref: '#/components/parameters/start'
4379 - $ref: '#/components/parameters/count'
4380 - $ref: '#/components/parameters/videoRedundanciesSort'
4383 description: successful operation
4389 $ref: '#/components/schemas/VideoRedundancy'
4393 summary: Mirror a video
4394 operationId: putMirroredVideo
4405 $ref: '#/components/schemas/Video/properties/id'
4410 description: successful operation
4412 description: cannot mirror a local video
4414 description: video does not exist
4416 description: video is already mirrored
4418 /server/redundancy/videos/{redundancyId}:
4422 summary: Delete a mirror done on a video
4423 operationId: delMirroredVideo
4428 - name: redundancyId
4431 description: id of an existing redundancy on a video
4436 description: successful operation
4438 description: video redundancy not found
4444 summary: Get instance stats
4445 description: Get instance public statistics. This endpoint is cached.
4446 operationId: getInstanceStats
4449 description: successful operation
4453 $ref: '#/components/schemas/ServerStats'
4455 /server/logs/client:
4459 summary: Send client log
4460 operationId: sendClientLog
4465 $ref: '#/components/schemas/SendClientLog'
4468 description: successful operation
4474 summary: Get instance logs
4475 operationId: getInstanceLogs
4481 description: successful operation
4493 summary: Get instance audit logs
4494 operationId: getInstanceAuditLogs
4500 description: successful operation
4508 '/feeds/video-comments.{format}':
4512 summary: List comments on videos
4513 operationId: getSyndicatedComments
4518 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4531 description: 'limit listing to a specific video'
4536 description: 'limit listing to a specific account'
4541 description: 'limit listing to a specific account'
4544 - name: videoChannelId
4546 description: 'limit listing to a specific video channel'
4549 - name: videoChannelName
4551 description: 'limit listing to a specific video channel'
4556 description: successful operation
4561 default: 'max-age=900' # 15 min cache
4565 $ref: '#/components/schemas/VideoCommentsForXML'
4568 externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
4569 application/rss+xml:
4571 $ref: '#/components/schemas/VideoCommentsForXML'
4574 externalValue: https://peertube2.cpy.re/feeds/video-comments.rss?filter=local
4577 $ref: '#/components/schemas/VideoCommentsForXML'
4580 externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
4581 application/atom+xml:
4583 $ref: '#/components/schemas/VideoCommentsForXML'
4586 externalValue: https://peertube2.cpy.re/feeds/video-comments.atom?filter=local
4592 externalValue: https://peertube2.cpy.re/feeds/video-comments.json?filter=local
4594 x-summary: field inconsistencies
4597 - videoId filter is mixed with a channel filter
4599 description: video, video channel or account not found
4601 description: accept header unsupported
4603 '/feeds/videos.{format}':
4607 summary: List videos
4608 operationId: getSyndicatedVideos
4613 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4626 description: 'limit listing to a specific account'
4631 description: 'limit listing to a specific account'
4634 - name: videoChannelId
4636 description: 'limit listing to a specific video channel'
4639 - name: videoChannelName
4641 description: 'limit listing to a specific video channel'
4644 - $ref: '#/components/parameters/sort'
4645 - $ref: '#/components/parameters/nsfw'
4646 - $ref: '#/components/parameters/isLocal'
4647 - $ref: '#/components/parameters/include'
4648 - $ref: '#/components/parameters/privacyOneOf'
4649 - $ref: '#/components/parameters/hasHLSFiles'
4650 - $ref: '#/components/parameters/hasWebtorrentFiles'
4653 description: successful operation
4658 default: 'max-age=900' # 15 min cache
4662 $ref: '#/components/schemas/VideosForXML'
4665 externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
4666 application/rss+xml:
4668 $ref: '#/components/schemas/VideosForXML'
4671 externalValue: https://peertube2.cpy.re/feeds/videos.rss?filter=local
4674 $ref: '#/components/schemas/VideosForXML'
4677 externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
4678 application/atom+xml:
4680 $ref: '#/components/schemas/VideosForXML'
4683 externalValue: https://peertube2.cpy.re/feeds/videos.atom?filter=local
4689 externalValue: https://peertube2.cpy.re/feeds/videos.json?filter=local
4691 description: video channel or account not found
4693 description: accept header unsupported
4695 '/feeds/subscriptions.{format}':
4700 summary: List videos of subscriptions tied to a token
4701 operationId: getSyndicatedSubscriptionVideos
4706 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4719 description: limit listing to a specific account
4725 description: private token allowing access
4729 - $ref: '#/components/parameters/sort'
4730 - $ref: '#/components/parameters/nsfw'
4731 - $ref: '#/components/parameters/isLocal'
4732 - $ref: '#/components/parameters/include'
4733 - $ref: '#/components/parameters/privacyOneOf'
4734 - $ref: '#/components/parameters/hasHLSFiles'
4735 - $ref: '#/components/parameters/hasWebtorrentFiles'
4738 description: successful operation
4743 default: 'max-age=900' # 15 min cache
4747 $ref: '#/components/schemas/VideosForXML'
4748 application/rss+xml:
4750 $ref: '#/components/schemas/VideosForXML'
4753 $ref: '#/components/schemas/VideosForXML'
4754 application/atom+xml:
4756 $ref: '#/components/schemas/VideosForXML'
4761 description: accept header unsupported
4767 summary: List plugins
4768 operationId: getPlugins
4781 - $ref: '#/components/parameters/start'
4782 - $ref: '#/components/parameters/count'
4783 - $ref: '#/components/parameters/sort'
4786 description: successful operation
4790 $ref: '#/components/schemas/PluginResponse'
4796 summary: List available plugins
4797 operationId: getAvailablePlugins
4810 - name: currentPeerTubeEngine
4814 - $ref: '#/components/parameters/start'
4815 - $ref: '#/components/parameters/count'
4816 - $ref: '#/components/parameters/sort'
4819 description: successful operation
4823 $ref: '#/components/schemas/PluginResponse'
4825 description: plugin index unavailable
4831 summary: Install a plugin
4832 operationId: addPlugin
4845 example: peertube-plugin-auth-ldap
4848 additionalProperties: false
4855 additionalProperties: false
4858 description: successful operation
4860 description: should have either `npmName` or `path` set
4866 summary: Update a plugin
4867 operationId: updatePlugin
4880 example: peertube-plugin-auth-ldap
4883 additionalProperties: false
4890 additionalProperties: false
4893 description: successful operation
4895 description: should have either `npmName` or `path` set
4897 description: existing plugin not found
4903 summary: Uninstall a plugin
4904 operationId: uninstallPlugin
4916 description: name of the plugin/theme in its package.json
4917 example: peertube-plugin-auth-ldap
4922 description: successful operation
4924 description: existing plugin not found
4930 summary: Get a plugin
4931 operationId: getPlugin
4936 - $ref: '#/components/parameters/npmName'
4939 description: successful operation
4943 $ref: '#/components/schemas/Plugin'
4945 description: plugin not found
4947 /plugins/{npmName}/settings:
4951 summary: Set a plugin's settings
4956 - $ref: '#/components/parameters/npmName'
4965 additionalProperties: true
4968 description: successful operation
4970 description: plugin not found
4972 /plugins/{npmName}/public-settings:
4976 summary: Get a plugin's public settings
4978 - $ref: '#/components/parameters/npmName'
4981 description: successful operation
4986 additionalProperties: true
4988 description: plugin not found
4990 /plugins/{npmName}/registered-settings:
4994 summary: Get a plugin's registered settings
4999 - $ref: '#/components/parameters/npmName'
5002 description: successful operation
5007 additionalProperties: true
5009 description: plugin not found
5013 summary: Create playback metrics
5014 description: These metrics are exposed by OpenTelemetry metrics exporter if enabled.
5021 $ref: '#/components/schemas/PlaybackMetricCreate'
5024 description: successful operation
5027 - url: 'https://peertube2.cpy.re/api/v1'
5028 description: Live Test Server (live data - latest nightly version)
5029 - url: 'https://peertube3.cpy.re/api/v1'
5030 description: Live Test Server (live data - latest RC version)
5031 - url: 'https://peertube.cpy.re/api/v1'
5032 description: Live Test Server (live data - stable version)
5039 description: Offset used to paginate results
5047 description: "Number of items to return"
5057 description: Sort column
5065 description: Plain text search, applied to various parts of the model depending on endpoint
5073 If the administrator enabled search index support, you can override the default search target.
5076 **Warning**: If you choose to make an index search, PeerTube will get results from a third party service.
5077 It means the instance may not yet know the objects you fetched. If you want to load video/channel information:
5078 * If the current user has the ability to make a remote URI search (this information is available in the config endpoint),
5079 then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database.
5080 After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
5081 * If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch
5082 the data from the origin instance API
5105 Sort videos by criteria (prefixing with `-` means `DESC` order):
5106 * `hot` - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
5107 * `best` - Same than `hot`, but also takes into account user video history
5108 * `trending` - Sort videos by recent views ("recent" is defined by the admin)
5109 * `views` - Sort videos using their `views` counter
5110 * `publishedAt` - Sort by video publication date (when it became publicly available)
5116 Sort videos by criteria (prefixing with `-` means `DESC` order):
5131 description: Sort comments by criteria
5141 description: Sort blocklists by criteria
5157 description: Plain text search that will match with user usernames or emails
5164 description: Filter results down to (un)banned users
5171 description: Sort users by criteria
5182 description: Sort abuses by criteria
5189 videoRedundanciesSort:
5193 description: Sort abuses by criteria
5202 description: Sort followers by criteria
5211 description: The username or handle of the account
5214 example: chocobozzz | chocobozzz@example.org
5219 description: Entity id
5221 $ref: '#/components/schemas/id'
5226 description: The object id, uuid or short uuid
5229 - $ref: '#/components/schemas/id'
5230 - $ref: '#/components/schemas/UUIDv4'
5231 - $ref: '#/components/schemas/shortUUID'
5236 description: Playlist id
5238 $ref: '#/components/schemas/VideoPlaylist/properties/id'
5240 name: playlistElementId
5243 description: Playlist element id
5245 $ref: '#/components/schemas/id'
5250 description: Abuse id
5252 $ref: '#/components/schemas/Abuse/properties/id'
5254 name: abuseMessageId
5257 description: Abuse message id
5259 $ref: '#/components/schemas/AbuseMessage/properties/id'
5261 name: captionLanguage
5264 description: The caption language
5266 $ref: '#/components/schemas/VideoLanguageSet'
5271 description: The video channel handle
5274 example: my_username | my_username@example.com
5279 description: Channel Sync id
5281 $ref: '#/components/schemas/Abuse/properties/id'
5283 name: subscriptionHandle
5286 description: The subscription handle
5289 example: my_username | my_username@example.com
5294 description: The thread id (root comment id)
5301 description: The comment id
5303 $ref: '#/components/schemas/VideoComment/properties/id'
5308 description: whether or not the video is a live
5315 description: category id of the video (see [/videos/categories](#operation/getCategories))
5318 - $ref: '#/components/schemas/VideoCategorySet'
5321 $ref: '#/components/schemas/VideoCategorySet'
5328 description: tag(s) of the video
5342 description: tag(s) of the video, where all should be present in the video
5355 description: language id of the video (see [/videos/languages](#operation/getLanguages)). Use `_unknown` to filter on videos that don't have a video language
5358 - $ref: '#/components/schemas/VideoLanguageSet'
5361 $ref: '#/components/schemas/VideoLanguageSet'
5368 description: licence id of the video (see [/videos/licences](#operation/getLicences))
5371 - $ref: '#/components/schemas/VideoLicenceSet'
5374 $ref: '#/components/schemas/VideoLicenceSet'
5381 description: if you don't need the `total` in the response
5392 description: whether to include nsfw videos, if any
5404 description: '**PeerTube >= 4.0** Display only local or remote videos'
5411 description: '**PeerTube >= 4.0** Display only videos that have HLS files'
5413 name: hasWebtorrentFiles
5418 description: '**PeerTube >= 4.0** Display only videos that have WebTorrent files'
5424 $ref: '#/components/schemas/VideoPrivacySet'
5425 description: '**PeerTube >= 4.0** Display only videos in this specific privacy/privacies'
5439 **PeerTube >= 4.0** Include additional videos in results (can be combined using bitwise or operator)
5443 - `1` NOT_PUBLISHED_STATE
5454 description: list of uris to check if each is part of the user subscriptions
5464 description: name of the plugin/theme on npmjs.com or in its package.json
5467 example: peertube-plugin-auth-ldap
5472 description: job type
5476 - activitypub-follow
5477 - activitypub-http-broadcast
5478 - activitypub-http-fetcher
5479 - activitypub-http-unicast
5484 - videos-views-stats
5485 - activitypub-refresher
5488 - video-channel-import
5511 Authenticating via OAuth requires the following steps:
5512 - Have an activated account
5513 - [Generate] an access token for that account at `/api/v1/users/token`.
5514 - Make requests with the *Authorization: Bearer <token\>* header
5515 - Profit, depending on the role assigned to the account
5517 Note that the __access token is valid for 1 day__ and is given
5518 along with a __refresh token valid for 2 weeks__.
5520 [Generate]: https://docs.joinpeertube.org/api-rest-getting-started
5524 tokenUrl: /api/v1/users/token
5527 moderator: Moderator scope
5530 # Reusable core properties
5538 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
5539 pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
5544 description: translation of a uuid v4 with a bigger alphabet to have a shorter uuid
5545 example: 2y84q2MQUMWPbiEcxNXMgC
5548 description: immutable name of the user, used to find or mention its actor
5550 pattern: '/^[a-z0-9._]+$/'
5555 description: immutable name of the channel, used to interact with its actor
5556 example: framasoft_videos
5557 pattern: '/^[a-zA-Z0-9\\-_.:]+$/'
5568 description: category id of the video (see [/videos/categories](#operation/getCategories))
5570 VideoConstantNumber-Category:
5573 $ref: '#/components/schemas/VideoCategorySet'
5576 example: Science & Technology
5580 description: licence id of the video (see [/videos/licences](#operation/getLicences))
5582 VideoConstantNumber-Licence:
5585 $ref: '#/components/schemas/VideoLicenceSet'
5588 example: Attribution - Share Alike
5592 description: language id of the video (see [/videos/languages](#operation/getLanguages))
5594 VideoConstantString-Language:
5597 $ref: '#/components/schemas/VideoLanguageSet'
5602 VideoPlaylistPrivacySet:
5608 description: Video playlist privacy policy (see [/video-playlists/privacies])
5609 VideoPlaylistPrivacyConstant:
5612 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
5616 VideoPlaylistTypeSet:
5621 description: The video playlist type (Regular = `1`, Watch Later = `2`)
5622 VideoPlaylistTypeConstant:
5625 $ref: '#/components/schemas/VideoPlaylistTypeSet'
5636 description: privacy id of the video (see [/videos/privacies](#operation/getPrivacyPolicies))
5637 VideoPrivacyConstant:
5640 $ref: '#/components/schemas/VideoPrivacySet'
5648 additionalProperties:
5649 x-additionalPropertiesName: account
5658 additionalProperties:
5659 x-additionalPropertiesName: host
5680 description: 'The user role (Admin = `0`, Moderator = `1`, User = `2`)'
5687 description: 'Admin flags for the user (None = `0`, Bypass video blocklist = `1`)'
5690 LiveVideoLatencyMode:
5696 description: 'The live latency mode (Default = `1`, High latency = `2`, Small Latency = `3`)'
5717 - `4`: Waiting for live stream
5719 - `6`: To move to an external storage (object storage...)
5720 - `7`: Transcoding failed
5721 - `8`: Moving to an external storage failed
5722 - `9`: To edit using studio edition feature
5732 description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
5736 $ref: '#/components/schemas/AbuseStateSet'
5739 AbusePredefinedReasons:
5752 example: [spamOrMisleading]
5757 Video resolution (`0`, `240`, `360`, `720`, `1080`, `1440` or `2160`)
5759 `0` is used as a special value for stillimage videos dedicated to audio, a.k.a. audio-only videos.
5761 VideoResolutionConstant:
5762 description: resolutions and their labels for the video
5765 $ref: '#/components/schemas/VideoResolutionSet'
5769 VideoScheduledUpdate:
5772 $ref: '#/components/schemas/VideoPrivacySet'
5776 description: When to update the video
5796 $ref: '#/components/schemas/ActorImage'
5797 VideoChannelSummary:
5800 $ref: '#/components/schemas/id'
5814 $ref: '#/components/schemas/ActorImage'
5828 - $ref: '#/components/schemas/Video'
5833 $ref: '#/components/schemas/id'
5837 description: magnet URI allowing to resolve the video via BitTorrent without a metainfo file
5838 pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
5840 $ref: '#/components/schemas/VideoResolutionConstant'
5843 description: Video file size in bytes
5846 description: Direct URL of the torrent file
5850 description: URL endpoint that transfers the torrent file as an attachment (so that the browser opens a download dialog)
5854 description: Direct URL of the video
5858 description: URL endpoint that transfers the video file as an attachment (so that the browser opens a download dialog)
5862 description: Frames per second of the video file
5866 description: URL dereferencing the output of ffprobe on the file
5867 VideoStreamingPlaylists:
5872 $ref: '#/components/schemas/id'
5880 - $ref: '#/components/schemas/VideoStreamingPlaylists-HLS'
5881 VideoStreamingPlaylists-HLS:
5892 Video files associated to this playlist.
5894 The difference with the root `files` property is that these files are fragmented, so they can be used in this streaming playlist (HLS, etc.)
5896 $ref: '#/components/schemas/VideoFile'
5908 $ref: '#/components/schemas/Video/properties/id'
5910 $ref: '#/components/schemas/Video/properties/uuid'
5912 $ref: '#/components/schemas/Video/properties/name'
5916 description: object id for the video
5918 - $ref: '#/components/schemas/id'
5920 description: universal identifier for the video, that can be used across instances
5922 - $ref: '#/components/schemas/UUIDv4'
5925 - $ref: '#/components/schemas/shortUUID'
5931 example: 2017-10-01T10:52:46.396Z
5932 description: time at which the video object was first drafted
5936 example: 2018-10-01T10:52:46.396Z
5937 description: time at which the video was marked as ready for playback (with restrictions depending on `privacy`). Usually set after a `state` evolution.
5941 example: 2021-05-04T08:01:01.502Z
5942 description: last time the video's metadata was modified
5943 originallyPublishedAt:
5946 example: 2010-10-01T10:52:46.396Z
5947 description: used to represent a date of first publication, prior to the practical publication date of `publishedAt`
5950 - $ref: '#/components/schemas/VideoConstantNumber-Category'
5951 description: category in which the video is classified
5954 - $ref: '#/components/schemas/VideoConstantNumber-Licence'
5955 description: licence under which the video is distributed
5958 - $ref: '#/components/schemas/VideoConstantString-Language'
5959 description: main language used in the video
5962 - $ref: '#/components/schemas/VideoPrivacyConstant'
5963 description: privacy policy used to distribute the video
5967 **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n
5968 **Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\r\n*A decentralized video hosting network, based on fr...
5972 truncated description of the video, written in Markdown.
5973 Resolve `descriptionPath` to get the full description of maximum `10000` characters.
5978 description: duration of the video in seconds
5983 description: title of the video
5984 example: What is PeerTube?
5989 example: /static/thumbnails/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
5992 example: /lazy-static/previews/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
5995 example: /videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee
6012 - $ref: '#/components/schemas/VideoStateConstant'
6013 description: represents the internal state of the video processing within the PeerTube instance
6017 - $ref: '#/components/schemas/VideoScheduledUpdate'
6025 $ref: '#/components/schemas/AccountSummary'
6027 $ref: '#/components/schemas/VideoChannelSummary'
6036 - $ref: '#/components/schemas/Video'
6041 description: If the video is a live, you have the amount of current viewers
6044 example: /api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180a6d/description
6045 description: path at which to get the full description of maximum `10000` characters
6048 description: A text tell the audience how to support the video creator
6049 example: Please support our work on https://soutenir.framasoft.org/en/ <3
6053 $ref: '#/components/schemas/VideoChannel'
6055 $ref: '#/components/schemas/Account'
6057 example: [flowers, gardening]
6075 - https://peertube2.cpy.re/tracker/announce
6076 - wss://peertube2.cpy.re/tracker/socket
6080 $ref: '#/components/schemas/VideoFile'
6082 WebTorrent/raw video files. If WebTorrent is disabled on the server:
6084 - field will be empty
6085 - video files will be found in `streamingPlaylists[].files` field
6089 $ref: '#/components/schemas/VideoStreamingPlaylists'
6091 HLS playlists/manifest files. If HLS is disabled on the server:
6093 - field will be empty
6094 - video files will be found in `files` field
6095 FileRedundancyInformation:
6098 $ref: '#/components/schemas/id'
6123 $ref: '#/components/schemas/id'
6130 $ref: '#/components/schemas/UUIDv4'
6137 $ref: '#/components/schemas/FileRedundancyInformation'
6141 $ref: '#/components/schemas/FileRedundancyInformation'
6142 VideoImportStateConstant:
6150 description: 'The video import state (Pending = `1`, Success = `2`, Failed = `3`)'
6157 additionalProperties: false
6161 $ref: '#/components/schemas/VideoImport/properties/targetUrl'
6162 required: [targetUrl]
6165 $ref: '#/components/schemas/VideoImport/properties/magnetUri'
6166 required: [magnetUri]
6169 $ref: '#/components/schemas/VideoImport/properties/torrentfile'
6170 required: [torrentfile]
6171 - $ref: '#/components/schemas/VideoUploadRequestCommon'
6180 - $ref: '#/components/schemas/id'
6184 description: remote URL where to find the import's source video
6185 example: https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d
6189 description: magnet URI allowing to resolve the import's source video
6190 pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
6195 description: Torrent file containing only the video file
6202 - $ref: '#/components/schemas/VideoImportStateConstant'
6218 - $ref: '#/components/schemas/Video'
6228 $ref: '#/components/schemas/VideoImport'
6232 $ref: '#/components/schemas/id'
6235 example: The video is a spam
6239 $ref: '#/components/schemas/AbusePredefinedReasons'
6241 $ref: '#/components/schemas/Account'
6243 $ref: '#/components/schemas/AbuseStateConstant'
6246 example: Decided to ban the server since it spams us regularly
6250 $ref: '#/components/schemas/VideoInfo'
6257 $ref: '#/components/schemas/id'
6268 $ref: '#/components/schemas/AccountSummary'
6272 $ref: '#/components/schemas/id'
6274 $ref: '#/components/schemas/Video/properties/id'
6286 $ref: '#/components/schemas/UUIDv4'
6304 $ref: '#/components/schemas/id'
6306 $ref: '#/components/schemas/UUIDv4'
6309 - $ref: '#/components/schemas/shortUUID'
6332 $ref: '#/components/schemas/VideoPlaylistPrivacyConstant'
6334 $ref: '#/components/schemas/VideoPlaylistTypeConstant'
6336 $ref: '#/components/schemas/AccountSummary'
6338 $ref: '#/components/schemas/VideoChannelSummary'
6342 $ref: '#/components/schemas/id'
6349 description: Text of the comment
6351 example: This video is wonderful!
6353 $ref: '#/components/schemas/id'
6357 - $ref: '#/components/schemas/id'
6359 $ref: '#/components/schemas/Video/properties/id'
6374 totalRepliesFromVideoAuthor:
6381 $ref: '#/components/schemas/Account'
6382 VideoCommentThreadTree:
6385 $ref: '#/components/schemas/VideoComment'
6389 $ref: '#/components/schemas/VideoCommentThreadTree'
6393 $ref: '#/components/schemas/VideoConstantString-Language'
6415 $ref: '#/components/schemas/id'
6426 $ref: '#/components/schemas/ActorImage'
6430 $ref: '#/components/schemas/id'
6435 description: immutable name of the actor, used to find or mention it
6437 - $ref: '#/components/schemas/username'
6441 description: server on which the actor is resident
6442 hostRedundancyAllowed:
6444 description: whether this actor's host allows redundancy of its videos
6448 description: number of actors subscribed to by this actor, as seen by this instance
6452 description: number of followers of this actor, as seen by this instance
6461 - $ref: '#/components/schemas/Actor'
6464 description: object id for the user tied to this account
6466 - $ref: '#/components/schemas/User/properties/id'
6469 description: editable name of the account, displayed in its representations
6474 description: text or bio displayed on the account's profile
6482 description: timestamp within the video, in seconds
6489 Event since last viewing call:
6490 * `seek` - If the user seeked the video
6513 VideoStatsRetention:
6525 VideoStatsTimeserie:
6602 allowedForCurrentIP:
6604 requiresEmailVerification:
6622 $ref: '#/components/schemas/VideoResolutionSet'
6639 videoChannelSynchronization:
6712 example: 16810141515
6753 description: URL of the current user page
6760 description: Stack trace of the error if there is one
6763 description: User agent of the web browser that sends the message
6766 description: Additional information regarding this log
6776 totalDailyActiveUsers:
6778 totalWeeklyActiveUsers:
6780 totalMonthlyActiveUsers:
6784 totalLocalVideoViews:
6786 description: Total video views made on the instance
6787 totalLocalVideoComments:
6789 description: Total comments made by local users
6790 totalLocalVideoFilesSize:
6796 totalLocalVideoChannels:
6798 totalLocalDailyActiveVideoChannels:
6800 totalLocalWeeklyActiveVideoChannels:
6802 totalLocalMonthlyActiveVideoChannels:
6804 totalLocalPlaylists:
6806 totalInstanceFollowers:
6808 totalInstanceFollowing:
6825 totalActivityPubMessagesProcessed:
6827 totalActivityPubMessagesSuccesses:
6829 totalActivityPubMessagesErrors:
6832 activityPubMessagesProcessedPerSecond:
6834 totalActivityPubMessagesWaiting:
6911 requiresEmailVerification:
6926 description: Settings that apply to new users, if registration is enabled
6930 example: 16810141515
6936 description: Settings pertaining to transcoding jobs
6940 allowAdditionalExtensions:
6942 description: Allow your users to upload .mkv, .mov, .avi, .wmv, .flv, .f4v, .3g2, .3gp, .mts, m2ts, .mxf, .nut videos
6945 description: If a user uploads an audio file, PeerTube will create a video by merging the preview file and the audio file
6948 description: Amount of threads used by ffmpeg for 1 transcoding job
6951 description: Amount of transcoding jobs to execute in parallel
6957 New profiles can be added by plugins ; available in core PeerTube: 'default'.
6960 description: Resolutions to transcode _new videos_ to
6982 description: WebTorrent-specific settings
6988 description: HLS-specific settings
7008 video_channel_synchronization:
7043 $ref: '#/components/schemas/id'
7045 $ref: '#/components/schemas/Actor'
7047 $ref: '#/components/schemas/Actor'
7050 description: score reflecting the reachability of the actor, with steps of `10` and a base score of `1000`.
7063 PredefinedAbuseReasons:
7064 description: Reason categories that help triage reports
7082 $ref: '#/components/schemas/id'
7094 - activitypub-http-unicast
7095 - activitypub-http-broadcast
7096 - activitypub-http-fetcher
7097 - activitypub-follow
7102 - videos-views-stats
7103 - activitypub-refresher
7105 - video-channel-import
7108 additionalProperties: true
7111 additionalProperties: true
7127 $ref: '#/components/schemas/id'
7132 $ref: '#/components/schemas/id'
7133 VideoUploadRequestCommon:
7136 description: Video name
7138 example: What is PeerTube?
7142 description: Channel id that will contain this video
7147 $ref: '#/components/schemas/VideoPrivacySet'
7149 $ref: '#/components/schemas/VideoCategorySet'
7151 $ref: '#/components/schemas/VideoLicenceSet'
7153 $ref: '#/components/schemas/VideoLanguageSet'
7155 description: Video description
7158 **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**
7160 description: Whether or not we wait transcoding before publish the video
7163 description: A text tell the audience how to support the video creator
7164 example: Please support our work on https://soutenir.framasoft.org/en/ <3
7167 description: Whether or not this video contains sensitive content
7170 description: Video tags (maximum 5 tags each between 2 and 30 characters)
7183 description: Enable or disable comments for this video
7186 description: Enable or disable downloading for this video
7188 originallyPublishedAt:
7189 description: Date when the content was originally published
7193 $ref: '#/components/schemas/VideoScheduledUpdate'
7195 description: Video thumbnail file
7199 description: Video preview file
7205 VideoUploadRequestLegacy:
7207 - $ref: '#/components/schemas/VideoUploadRequestCommon'
7213 description: Video file
7216 VideoUploadRequestResumable:
7218 - $ref: '#/components/schemas/VideoUploadRequestCommon'
7224 description: Video filename including extension
7227 example: what_is_peertube.mp4
7229 description: Video thumbnail file
7233 description: Video preview file
7236 VideoUploadResponse:
7242 $ref: '#/components/schemas/Video/properties/id'
7244 $ref: '#/components/schemas/Video/properties/uuid'
7246 $ref: '#/components/schemas/Video/properties/shortUUID'
7247 CommentThreadResponse:
7256 $ref: '#/components/schemas/VideoComment'
7257 CommentThreadPostResponse:
7260 $ref: '#/components/schemas/VideoComment'
7270 $ref: '#/components/schemas/Video'
7274 $ref: '#/components/schemas/Account'
7277 description: Automatically start playing the upcoming video after the currently playing video
7278 autoPlayNextVideoPlaylist:
7280 description: Automatically start playing the video on the playlist after the currently playing video
7283 description: Automatically start playing the video on the watch page
7293 description: The user email
7296 description: Has the user confirmed their email address?
7299 - $ref: '#/components/schemas/id'
7303 description: Auth plugin to use to authenticate the user
7307 noInstanceConfigWarningModal:
7309 noAccountSetupWarningModal:
7314 $ref: '#/components/schemas/NSFWPolicy'
7316 $ref: '#/components/schemas/UserRole'
7325 description: Theme enabled by this user
7327 $ref: '#/components/schemas/username'
7331 $ref: '#/components/schemas/VideoChannel'
7334 description: The user video quota in bytes
7338 description: The user daily video quota in bytes
7342 description: Enable P2P in the player
7345 - $ref: '#/components/schemas/User'
7347 # optionally present fields: they require WITH_STATS scope
7350 description: Count of videos published
7353 description: Count of reports/abuses of which the user is a target
7354 abusesAcceptedCount:
7356 description: Count of reports/abuses created by the user and accepted/acted upon by the moderation team
7359 description: Count of reports/abuses created by the user
7362 description: Count of comments published
7366 $ref: '#/components/schemas/username'
7368 $ref: '#/components/schemas/password'
7372 description: The user email
7375 description: The user video quota in bytes
7379 description: The user daily video quota in bytes
7382 $ref: '#/components/schemas/usernameChannel'
7384 $ref: '#/components/schemas/UserRole'
7386 $ref: '#/components/schemas/UserAdminFlags'
7397 description: The updated email of the user
7399 - $ref: '#/components/schemas/User/properties/email'
7402 description: Set the email as verified
7405 description: The updated video quota of the user in bytes
7408 description: The updated daily video quota of the user in bytes
7412 description: The auth plugin to use to authenticate the user
7413 example: 'peertube-plugin-auth-saml2'
7415 $ref: '#/components/schemas/UserRole'
7417 $ref: '#/components/schemas/UserAdminFlags'
7419 $ref: '#/components/schemas/password'
7421 # see shared/models/users/user-update-me.model.ts:
7424 $ref: '#/components/schemas/password'
7426 $ref: '#/components/schemas/password'
7428 description: new email used for login and service communications
7430 - $ref: '#/components/schemas/User/properties/email'
7433 description: new name of the user in its representations
7438 description: new NSFW display policy
7445 description: whether to enable P2P in the player or not
7448 description: new preference regarding playing videos automatically
7451 description: new preference regarding playing following videos automatically
7452 autoPlayNextVideoPlaylist:
7454 description: new preference regarding playing following playlist videos automatically
7455 videosHistoryEnabled:
7457 description: whether to keep track of watched history or not
7462 description: list of languages to filter videos down to
7465 noInstanceConfigWarningModal:
7467 noAccountSetupWarningModal:
7474 $ref: '#/components/schemas/id'
7481 description: Rating of the video
7488 $ref: '#/components/schemas/Video'
7495 description: Rating of the video
7502 description: immutable name of the user, used to find or mention its actor
7504 - $ref: '#/components/schemas/username'
7506 $ref: '#/components/schemas/password'
7510 description: email of the user, used for login or service communications
7513 description: editable name of the user, displayed in its representations
7518 description: channel base information used to create the first channel of the user
7521 $ref: '#/components/schemas/usernameChannel'
7533 pattern: /^[a-z0-9]$/
7536 example: v1ikx5hnfop4mdpnci8nsqh93c45rldf
7539 pattern: /^[a-zA-Z0-9]$/
7542 example: AjWiOapPltI6EnsWQwlFarRtLh4u8tDt
7543 OAuthToken-password:
7545 - $ref: '#/components/schemas/OAuthClient'
7555 $ref: '#/components/schemas/User/properties/username'
7557 $ref: '#/components/schemas/password'
7564 OAuthToken-refresh_token:
7566 - $ref: '#/components/schemas/OAuthClient'
7577 example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
7586 - $ref: '#/components/schemas/Actor'
7591 description: editable name of the channel, displayed in its representations
7592 example: Videos of Framasoft
7597 example: Videos made with <3 by Framasoft
7602 description: text shown by default on all videos of this channel, to tell the audience how to support it
7603 example: Please support our work on https://soutenir.framasoft.org/en/ <3
7616 $ref: '#/components/schemas/ActorImage'
7625 $ref: '#/components/schemas/UUIDv4'
7629 - $ref: '#/components/schemas/VideoChannel'
7632 description: username of the channel to create
7634 - $ref: '#/components/schemas/usernameChannel'
7640 - $ref: '#/components/schemas/VideoChannel'
7642 bulkVideosSupportUpdate:
7644 description: Update the support field for all videos of this channel
7654 - $ref: '#/components/schemas/VideoChannel'
7655 - $ref: '#/components/schemas/Actor'
7657 ImportVideosInChannelCreate:
7662 example: https://youtube.com/c/UC_myfancychannel
7665 description: If part of a channel sync process, specify its id to assign video imports to this channel synchronization
7667 - 'externalChannelUrl'
7673 $ref: '#/components/schemas/id'
7685 example: 'https://youtube.com/c/UC_myfancychannel'
7694 $ref: '#/components/schemas/VideoChannel'
7695 VideoChannelSyncList:
7705 - $ref: '#/components/schemas/VideoChannelSync'
7706 VideoChannelSyncCreate:
7711 example: https://youtube.com/c/UC_myfancychannel
7713 $ref: '#/components/schemas/id'
7717 name: 'media:peerLink'
7726 - application/x-bittorrent
7732 name: 'media:content'
7763 VideoCommentsForXML:
7798 description: video watch page URL
7801 description: video canonical URL
7805 description: video publication date
7808 description: video description
7811 description: video description
7814 description: publisher user name
7817 description: video category (MRSS)
7820 description: see [media:community](https://www.rssboard.org/media-rss#media-community) (MRSS)
7835 description: video embed path, relative to the canonical URL domain (MRSS)
7844 description: video watch path, relative to the canonical URL domain (MRSS)
7865 description: see [media:title](https://www.rssboard.org/media-rss#media-title) (MRSS). We only use `plain` titles.
7866 'media:description':
7873 description: see [media:rating](https://www.rssboard.org/media-rss#media-rating) (MRSS)
7876 description: main streamable file for the video
7886 - application/x-bittorrent
7895 description: list of streamable files for the video. see [media:peerLink](https://www.rssboard.org/media-rss#media-peerlink) and [media:content](https://www.rssboard.org/media-rss#media-content) or (MRSS)
7898 - $ref: '#/components/schemas/MRSSPeerLink'
7899 - $ref: '#/components/schemas/MRSSGroupContent'
7900 NotificationSettingValue:
7917 $ref: '#/components/schemas/id'
7921 Notification type, following the `UserNotificationType` enum:
7923 - `1` NEW_VIDEO_FROM_SUBSCRIPTION
7925 - `2` NEW_COMMENT_ON_MY_VIDEO
7927 - `3` NEW_ABUSE_FOR_MODERATORS
7929 - `4` BLACKLIST_ON_MY_VIDEO
7931 - `5` UNBLACKLIST_ON_MY_VIDEO
7933 - `6` MY_VIDEO_PUBLISHED
7935 - `7` MY_VIDEO_IMPORT_SUCCESS
7937 - `8` MY_VIDEO_IMPORT_ERROR
7939 - `9` NEW_USER_REGISTRATION
7943 - `11` COMMENT_MENTION
7945 - `12` VIDEO_AUTO_BLACKLIST_FOR_MODERATORS
7947 - `13` NEW_INSTANCE_FOLLOWER
7949 - `14` AUTO_INSTANCE_FOLLOWING
7951 - `15` ABUSE_STATE_CHANGE
7953 - `16` ABUSE_NEW_MESSAGE
7955 - `17` NEW_PLUGIN_VERSION
7957 - `18` NEW_PEERTUBE_VERSION
7963 - $ref: '#/components/schemas/VideoInfo'
7967 $ref: '#/components/schemas/ActorInfo'
7973 $ref: '#/components/schemas/id'
7976 $ref: '#/components/schemas/VideoInfo'
7981 $ref: '#/components/schemas/VideoImport/properties/magnetUri'
7991 $ref: '#/components/schemas/id'
7995 $ref: '#/components/schemas/VideoInfo'
7997 $ref: '#/components/schemas/ActorInfo'
8003 $ref: '#/components/schemas/id'
8006 - $ref: '#/components/schemas/VideoInfo'
8012 $ref: '#/components/schemas/id'
8015 - $ref: '#/components/schemas/VideoInfo'
8019 - $ref: '#/components/schemas/ActorInfo'
8025 $ref: '#/components/schemas/id'
8027 $ref: '#/components/schemas/ActorInfo'
8055 NotificationListResponse:
8064 $ref: '#/components/schemas/Notification'
8069 example: peertube-plugin-auth-ldap
8097 example: https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-auth-ldap
8100 additionalProperties: true
8116 $ref: '#/components/schemas/Plugin'
8123 description: User can stream multiple times in a permanent live
8126 description: User can select live latency mode if enabled by the instance
8127 $ref: '#/components/schemas/LiveVideoLatencyMode'
8133 description: Included in the response if an appropriate token is provided
8136 description: Included in the response if an appropriate token is provided
8139 description: RTMP stream key to use to stream into this live video. Included in the response if an appropriate token is provided
8143 description: User can stream multiple times in a permanent live
8146 description: User can select live latency mode if enabled by the instance
8147 $ref: '#/components/schemas/LiveVideoLatencyMode'
8149 VideoStudioCreateTask:
8197 title: add-watermark
8211 LiveVideoSessionResponse:
8218 description: Start date of the live session
8223 description: End date of the live session
8234 Error type if an error occurred during the live session:
8235 - `1`: Bad socket health (transcoding is too slow)
8236 - `2`: Max duration exceeded
8237 - `3`: Quota exceeded
8238 - `4`: Quota FFmpeg error
8239 - `5`: Video has been blacklisted during the live
8242 description: Video replay information
8247 $ref: '#/components/schemas/UUIDv4'
8249 $ref: '#/components/schemas/shortUUID'
8251 PlaybackMetricCreate:
8256 - 'p2p-media-loader'
8260 description: Current player video resolution
8263 description: Current player video fps
8266 description: How many resolution changes occured since the last metric creation
8269 description: How many errors occured since the last metric creation
8272 description: How many bytes were downloaded with P2P since the last metric creation
8273 downloadedBytesHTTP:
8275 description: How many bytes were downloaded with HTTP since the last metric creation
8278 description: How many bytes were uploaded with P2P since the last metric creation
8281 - $ref: '#/components/schemas/id'
8282 - $ref: '#/components/schemas/UUIDv4'
8283 - $ref: '#/components/schemas/shortUUID'
8288 - downloadedBytesP2P
8289 - downloadedBytesHTTP
8295 'https://search.example.org/api/v1/search/videos':
8297 summary: third-party search index MAY be used instead of the local index, if enabled by the instance admin. see `searchTarget`
8300 description: successful operation
8304 $ref: '#/components/schemas/VideoListResponse'