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 | `/live/segments-sha256/*` |
149 | `/.well-known/webfinger` |
151 In addition, all routes serving ActivityPub are CORS-enabled for all origins.
153 url: https://docs.joinpeertube.org/api-rest-reference.html
157 As a visitor, you can use this API to open an account (if registrations are open on
158 that PeerTube instance). As an admin, you should use the dedicated [User creation
159 API](#operation/addUser) instead.
161 x-displayName: Login/Logout
163 Sessions deal with access tokens over time. Only __one session token can currently be used at a time__.
166 Accounts encompass remote accounts discovered across the federation,
167 and correspond to the main Actor, along with video channels a user can create, which
170 When a comment is posted, it is done with your Account's Actor.
173 Using some features of PeerTube require authentication, for which User
174 provide different levels of permission as well as associated user
175 information. Each user has a corresponding local Account for federation.
178 Operations related to your own User, when logged-in.
179 - name: My Subscriptions
181 Operations related to your subscriptions to video channels, their
182 new videos, and how to keep up to date with their latest publications!
185 Operations related to your watch history.
186 - name: My Notifications
188 Notifications following new videos, follows or reports. They allow you
189 to keep track of the interactions and overall important information that
190 concerns you. You MAY set per-notification type delivery preference, to
191 receive the info either by mail, by in-browser notification or both.
194 Each server exposes public information regarding supported videos and
198 Jobs are long-running tasks enqueued and processed by the instance
199 itself. No additional worker registration is currently available.
200 - name: Instance Follows
202 Managing servers which the instance interacts with is crucial to the
203 concept of federation in PeerTube and external video indexation. The PeerTube
204 server then deals with inter-server ActivityPub operations and propagates
205 information across its social graph by posting activities to actors' inbox
208 url: https://docs.joinpeertube.org/admin-following-instances?id=instances-follows
209 - name: Instance Redundancy
211 Redundancy is part of the inter-server solidarity that PeerTube fosters.
212 Manage the list of instances you wish to help by seeding their videos according
213 to the policy of video selection of your choice. Note that you have a similar functionality
214 to mirror individual videos, see [video mirroring](#tag/Video-Mirroring).
216 url: https://docs.joinpeertube.org/admin-following-instances?id=instances-redundancy
219 Managing plugins installed from a local path or from NPM, or search for new ones.
221 url: https://docs.joinpeertube.org/api-plugins
224 Abuses deal with reports of local or remote videos/comments/accounts alike.
227 Operations dealing with listing, uploading, fetching or modifying videos.
230 Operations dealing with adding video or audio. PeerTube supports two upload modes, and three import modes.
234 - [_legacy_](#operation/uploadLegacy), where the video file is sent in a single request
235 - [_resumable_](#operation/uploadResumableInit), where the video file is sent in chunks
237 You can upload videos more reliably by using the resumable variant. Its protocol lets
238 you resume an upload operation after a network interruption or other transmission failure,
239 saving time and bandwidth in the event of network failures.
241 Favor using resumable uploads in any of the following cases:
242 - You are transferring large files
243 - The likelihood of a network interruption is high
244 - Uploads are originating from a device with a low-bandwidth or unstable Internet connection,
245 such as a mobile device
249 - _URL_-based: where the URL points to any service supported by [youtube-dl](https://ytdl-org.github.io/youtube-dl/)
250 - _magnet_-based: where the URI resolves to a BitTorrent resource containing a single supported video file
251 - _torrent_-based: where the metainfo file resolves to a BitTorrent resource containing a single supported video file
253 The import function is practical when the desired video/audio is available online. It makes PeerTube
254 download it for you, saving you as much bandwidth and avoiding any instability or limitation your network might have.
255 - name: Video Imports
256 description: Operations dealing with listing, adding and removing video imports.
257 - name: Video Captions
258 description: Operations dealing with listing, adding and removing closed captions of a video.
259 - name: Video Channels
260 description: Operations dealing with the creation, modification and listing of videos within a channel.
261 - name: Video Comments
263 Operations dealing with comments to a video. Comments are organized in threads: adding a
264 comment in response to the video starts a thread, adding a reply to a comment adds it to
265 its root comment thread.
267 description: Operations dealing with blocking videos (removing them from view and preventing interactions).
269 description: Like/dislike a video.
270 - name: Video Playlists
271 description: Operations dealing with playlists of videos. Playlists are bound to users and/or channels.
273 description: Operations on video files
274 - name: Video Transcoding
275 description: Video transcoding related operations
277 description: Video statistics
279 description: Server syndication feeds
282 The search helps to find _videos_ or _channels_ from within the instance and beyond.
283 Videos from other instances federated by the instance (that is, instances
284 followed by the instance) can be found via keywords and other criteria of
287 Administrators can also enable the use of a remote search system, indexing
288 videos and channels not could be not federated by the instance.
290 description: Get and update the custom homepage
291 - name: Video Mirroring
293 PeerTube instances can mirror videos from one another, and help distribute some videos.
295 For importing videos as your own, refer to [video imports](#operation/importVideo).
324 - Video Ownership Change
344 - Instance Redundancy
354 summary: Get an account
355 operationId: getAccount
357 - $ref: '#/components/parameters/name'
360 description: successful operation
364 $ref: '#/components/schemas/Account'
366 description: account not found
368 '/accounts/{name}/videos':
373 summary: 'List videos of an account'
374 operationId: getAccountVideos
376 - $ref: '#/components/parameters/name'
377 - $ref: '#/components/parameters/categoryOneOf'
378 - $ref: '#/components/parameters/isLive'
379 - $ref: '#/components/parameters/tagsOneOf'
380 - $ref: '#/components/parameters/tagsAllOf'
381 - $ref: '#/components/parameters/licenceOneOf'
382 - $ref: '#/components/parameters/languageOneOf'
383 - $ref: '#/components/parameters/nsfw'
384 - $ref: '#/components/parameters/isLocal'
385 - $ref: '#/components/parameters/include'
386 - $ref: '#/components/parameters/privacyOneOf'
387 - $ref: '#/components/parameters/hasHLSFiles'
388 - $ref: '#/components/parameters/hasWebtorrentFiles'
389 - $ref: '#/components/parameters/skipCount'
390 - $ref: '#/components/parameters/start'
391 - $ref: '#/components/parameters/count'
392 - $ref: '#/components/parameters/videosSort'
395 description: successful operation
399 $ref: '#/components/schemas/VideoListResponse'
403 fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
404 .then(function(response) {
405 return response.json()
406 }).then(function(data) {
412 curl -s https://peertube2.cpy.re/api/v1/accounts/{name}/videos | jq
418 uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
420 http = Net::HTTP.new(uri.host, uri.port)
423 response = http.get(uri.request_uri)
425 puts JSON.parse(response.read_body)
430 r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos")
435 '/accounts/{name}/followers':
439 summary: 'List followers of an account'
442 operationId: getAccountFollowers
444 - $ref: '#/components/parameters/name'
445 - $ref: '#/components/parameters/start'
446 - $ref: '#/components/parameters/count'
447 - $ref: '#/components/parameters/followersSort'
448 - $ref: '#/components/parameters/search'
451 description: successful operation
463 $ref: '#/components/schemas/Follow'
469 summary: List accounts
470 operationId: getAccounts
472 - $ref: '#/components/parameters/start'
473 - $ref: '#/components/parameters/count'
474 - $ref: '#/components/parameters/sort'
477 description: successful operation
483 $ref: '#/components/schemas/Account'
489 summary: Get instance public configuration
490 operationId: getConfig
493 description: successful operation
497 $ref: '#/components/schemas/ServerConfig'
500 externalValue: https://peertube2.cpy.re/api/v1/config
504 summary: Get instance "About" information
505 operationId: getAbout
510 description: successful operation
514 $ref: '#/components/schemas/ServerConfigAbout'
517 externalValue: https://peertube2.cpy.re/api/v1/config/about
521 summary: Get instance runtime configuration
522 operationId: getCustomConfig
530 description: successful operation
534 $ref: '#/components/schemas/ServerConfigCustom'
536 summary: Set instance runtime configuration
537 operationId: putCustomConfig
545 description: successful operation
547 x-summary: field inconsistencies
550 - the emailer is disabled and the instance is open to registrations
551 - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled
553 summary: Delete instance runtime configuration
554 operationId: delCustomConfig
562 description: successful operation
564 /custom-pages/homepage/instance:
566 summary: Get instance custom homepage
571 description: No homepage set
573 description: successful operation
577 $ref: '#/components/schemas/CustomHomepage'
579 summary: Set instance custom homepage
593 description: content of the homepage, that will be injected in the client
596 description: successful operation
600 summary: Pause job queue
608 description: successful operation
612 summary: Resume job queue
620 description: successful operation
624 summary: List instance jobs
635 description: The state of the job ('' for for no filter)
645 - $ref: '#/components/parameters/jobType'
646 - $ref: '#/components/parameters/start'
647 - $ref: '#/components/parameters/count'
648 - $ref: '#/components/parameters/sort'
651 description: successful operation
664 $ref: '#/components/schemas/Job'
670 summary: List instances following the server
672 - $ref: '#/components/parameters/followState'
673 - $ref: '#/components/parameters/actorType'
674 - $ref: '#/components/parameters/start'
675 - $ref: '#/components/parameters/count'
676 - $ref: '#/components/parameters/sort'
679 description: successful operation
691 $ref: '#/components/schemas/Follow'
693 '/server/followers/{nameWithHost}':
695 summary: Remove or reject a follower to your server
705 description: The remote actor handle to remove from your followers
711 description: successful operation
713 description: follower not found
715 '/server/followers/{nameWithHost}/reject':
717 summary: Reject a pending follower to your server
727 description: The remote actor handle to remove from your followers
733 description: successful operation
735 description: follower not found
737 '/server/followers/{nameWithHost}/accept':
739 summary: Accept a pending follower to your server
749 description: The remote actor handle to remove from your followers
755 description: successful operation
757 description: follower not found
763 summary: List instances followed by the server
765 - $ref: '#/components/parameters/followState'
766 - $ref: '#/components/parameters/actorType'
767 - $ref: '#/components/parameters/start'
768 - $ref: '#/components/parameters/count'
769 - $ref: '#/components/parameters/sort'
772 description: successful operation
784 $ref: '#/components/schemas/Follow'
791 summary: Follow a list of actors (PeerTube instance, channel or account)
794 description: successful operation
796 description: cannot follow a non-HTTPS server
815 '/server/following/{hostOrHandle}':
817 summary: Unfollow an actor (PeerTube instance, channel or account)
827 description: The hostOrHandle to unfollow
832 description: successful operation
834 description: host or handle not found
838 summary: Create a user
847 description: user created
851 $ref: '#/components/schemas/AddUserResponse'
857 id: '$response.body#/user/id'
862 id: '$response.body#/user/id'
867 id: '$response.body#/user/id'
869 description: insufficient authority to create an admin or moderator
874 $ref: '#/components/schemas/AddUser'
876 If the smtp server is configured, you can leave the password empty and an email will be sent
877 asking the user to set it first.
881 operationId: getUsers
888 - $ref: '#/components/parameters/usersSearch'
889 - $ref: '#/components/parameters/usersBlocked'
890 - $ref: '#/components/parameters/start'
891 - $ref: '#/components/parameters/count'
892 - $ref: '#/components/parameters/usersSort'
895 description: successful operation
901 $ref: '#/components/schemas/User'
905 - $ref: '#/components/parameters/id'
907 summary: Delete a user
916 description: successful operation
927 description: include statistics about the user (only available as a moderator/admin)
932 x-summary: successful operation
934 As an admin/moderator, you can request a response augmented with statistics about the user's
935 moderation relations and videos usage, by using the `withStats` parameter.
940 - $ref: '#/components/schemas/User'
941 - $ref: '#/components/schemas/UserWithStats'
943 summary: Update a user
951 description: successful operation
956 $ref: '#/components/schemas/UpdateUser'
959 /oauth-clients/local:
961 summary: Login prerequisite
962 description: You need to retrieve a client id and secret before [logging in](#operation/getOAuthToken).
963 operationId: getOAuthClient
968 description: successful operation
972 $ref: '#/components/schemas/OAuthClient'
974 UseOAuthClientToLogin:
975 operationId: getOAuthToken
977 client_id: '$response.body#/client_id'
978 client_secret: '$response.body#/client_secret'
982 API="https://peertube2.cpy.re/api/v1"
985 curl -s "$API/oauth-clients/local"
990 operationId: getOAuthToken
991 description: With your [client id and secret](#operation/getOAuthClient), you can retrieve an access and refresh tokens.
996 application/x-www-form-urlencoded:
999 - $ref: '#/components/schemas/OAuthToken-password'
1000 - $ref: '#/components/schemas/OAuthToken-refresh_token'
1002 propertyName: grant_type
1004 password: '#/components/schemas/OAuthToken-password'
1005 refresh_token: '#/components/schemas/OAuthToken-refresh_token'
1008 description: successful operation
1019 example: 90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0
1020 description: valid for 1 day
1023 example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
1024 description: valid for 2 weeks
1029 refresh_token_expires_in:
1034 x-summary: client or credentials are invalid
1036 Disambiguate via `type`:
1037 - `invalid_client` for an unmatched `client_id`
1038 - `invalid_grant` for unmatched credentials
1040 x-summary: token expired
1042 Disambiguate via `type`:
1043 - default value for a regular authentication failure
1044 - `invalid_token` for an expired token
1049 API="https://peertube2.cpy.re/api/v1"
1050 USERNAME="<your_username>"
1051 PASSWORD="<your_password>"
1054 client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
1055 client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
1056 curl -s "$API/users/token" \
1057 --data client_id="$client_id" \
1058 --data client_secret="$client_secret" \
1059 --data grant_type=password \
1060 --data username="$USERNAME" \
1061 --data password="$PASSWORD" \
1062 | jq -r ".access_token"
1064 /users/revoke-token:
1067 description: Revokes your access token and its associated refresh token, destroying your current session.
1068 operationId: revokeOAuthToken
1075 description: successful operation
1079 summary: Register a user
1080 operationId: registerUser
1086 description: successful operation
1091 $ref: '#/components/schemas/RegisterUser'
1094 /users/{id}/verify-email:
1096 summary: Verify a user
1097 operationId: verifyUser
1099 Following a user registration, the new user will receive an email asking to click a link
1100 containing a secret.
1105 - $ref: '#/components/parameters/id'
1118 - verificationString
1121 description: successful operation
1123 description: invalid verification string
1125 description: user not found
1127 /users/ask-send-verify-email:
1129 summary: Resend user verification link
1130 operationId: resendEmailToVerifyUser
1136 description: successful operation
1140 summary: Get my user information
1141 operationId: getUserInfo
1149 description: successful operation
1155 $ref: '#/components/schemas/User'
1157 summary: Update my user information
1158 operationId: putUserInfo
1166 description: successful operation
1171 $ref: '#/components/schemas/UpdateMe'
1174 /users/me/videos/imports:
1176 summary: Get video imports of my user
1184 - $ref: '#/components/parameters/start'
1185 - $ref: '#/components/parameters/count'
1186 - $ref: '#/components/parameters/sort'
1189 description: successful operation
1193 $ref: '#/components/schemas/VideoImportsList'
1195 /users/me/video-quota-used:
1197 summary: Get my user used quota
1205 description: successful operation
1213 description: The user video quota used so far in bytes
1214 example: 16810141515
1215 videoQuotaUsedDaily:
1217 description: The user video quota used today in bytes
1220 '/users/me/videos/{videoId}/rating':
1222 summary: Get rate of my user for a video
1232 description: The video id
1234 $ref: '#/components/schemas/Video/properties/id'
1237 description: successful operation
1241 $ref: '#/components/schemas/GetMeVideoRating'
1245 summary: Get videos of my user
1253 - $ref: '#/components/parameters/start'
1254 - $ref: '#/components/parameters/count'
1255 - $ref: '#/components/parameters/sort'
1258 description: successful operation
1262 $ref: '#/components/schemas/VideoListResponse'
1264 /users/me/subscriptions:
1266 summary: Get my user subscriptions
1273 - $ref: '#/components/parameters/start'
1274 - $ref: '#/components/parameters/count'
1275 - $ref: '#/components/parameters/sort'
1278 description: successful operation
1282 $ref: '#/components/schemas/VideoChannelList'
1286 summary: Add subscription to my user
1299 description: uri of the video channels to subscribe to
1305 uri: 008a0e54-375d-49d0-8379-143202e24152@video.lqdn.fr
1308 description: successful operation
1310 /users/me/subscriptions/exist:
1312 summary: Get if subscriptions exist for my user
1319 - $ref: '#/components/parameters/subscriptionsUris'
1322 description: successful operation
1328 /users/me/subscriptions/videos:
1330 summary: List videos of subscriptions of my user
1338 - $ref: '#/components/parameters/categoryOneOf'
1339 - $ref: '#/components/parameters/isLive'
1340 - $ref: '#/components/parameters/tagsOneOf'
1341 - $ref: '#/components/parameters/tagsAllOf'
1342 - $ref: '#/components/parameters/licenceOneOf'
1343 - $ref: '#/components/parameters/languageOneOf'
1344 - $ref: '#/components/parameters/nsfw'
1345 - $ref: '#/components/parameters/isLocal'
1346 - $ref: '#/components/parameters/include'
1347 - $ref: '#/components/parameters/privacyOneOf'
1348 - $ref: '#/components/parameters/hasHLSFiles'
1349 - $ref: '#/components/parameters/hasWebtorrentFiles'
1350 - $ref: '#/components/parameters/skipCount'
1351 - $ref: '#/components/parameters/start'
1352 - $ref: '#/components/parameters/count'
1353 - $ref: '#/components/parameters/videosSort'
1356 description: successful operation
1360 $ref: '#/components/schemas/VideoListResponse'
1362 '/users/me/subscriptions/{subscriptionHandle}':
1364 summary: Get subscription of my user
1371 - $ref: '#/components/parameters/subscriptionHandle'
1374 description: successful operation
1378 $ref: '#/components/schemas/VideoChannel'
1380 summary: Delete subscription of my user
1387 - $ref: '#/components/parameters/subscriptionHandle'
1390 description: successful operation
1392 /users/me/notifications:
1394 summary: List my notifications
1402 description: only list unread notifications
1405 - $ref: '#/components/parameters/start'
1406 - $ref: '#/components/parameters/count'
1407 - $ref: '#/components/parameters/sort'
1410 description: successful operation
1414 $ref: '#/components/schemas/NotificationListResponse'
1416 /users/me/notifications/read:
1418 summary: Mark notifications as read by their id
1431 description: ids of the notifications to mark as read
1438 description: successful operation
1440 /users/me/notifications/read-all:
1442 summary: Mark all my notification as read
1449 description: successful operation
1451 /users/me/notification-settings:
1453 summary: Update my notification settings
1464 newVideoFromSubscription:
1465 $ref: '#/components/schemas/NotificationSettingValue'
1466 newCommentOnMyVideo:
1467 $ref: '#/components/schemas/NotificationSettingValue'
1469 $ref: '#/components/schemas/NotificationSettingValue'
1470 videoAutoBlacklistAsModerator:
1471 $ref: '#/components/schemas/NotificationSettingValue'
1473 $ref: '#/components/schemas/NotificationSettingValue'
1475 $ref: '#/components/schemas/NotificationSettingValue'
1476 myVideoImportFinished:
1477 $ref: '#/components/schemas/NotificationSettingValue'
1479 $ref: '#/components/schemas/NotificationSettingValue'
1480 newUserRegistration:
1481 $ref: '#/components/schemas/NotificationSettingValue'
1483 $ref: '#/components/schemas/NotificationSettingValue'
1484 newInstanceFollower:
1485 $ref: '#/components/schemas/NotificationSettingValue'
1486 autoInstanceFollowing:
1487 $ref: '#/components/schemas/NotificationSettingValue'
1490 description: successful operation
1492 /users/me/history/videos:
1494 summary: List watched videos history
1500 - $ref: '#/components/parameters/start'
1501 - $ref: '#/components/parameters/count'
1502 - $ref: '#/components/parameters/search'
1505 description: successful operation
1509 $ref: '#/components/schemas/VideoListResponse'
1511 /users/me/history/videos/{videoId}:
1513 summary: Delete history element
1523 $ref: '#/components/schemas/Video/properties/id'
1526 description: successful operation
1528 /users/me/history/videos/remove:
1530 summary: Clear video history
1537 multipart/form-data:
1542 description: history before this date will be deleted
1547 description: successful operation
1549 /users/me/avatar/pick:
1551 summary: Update my user avatar
1558 description: successful operation
1567 $ref: '#/components/schemas/ActorImage'
1569 description: image file too large
1571 X-File-Maximum-Size:
1575 description: Maximum file size for the avatar
1578 multipart/form-data:
1583 description: The file to upload
1588 contentType: image/png, image/jpeg
1592 summary: Delete my avatar
1599 description: successful operation
1603 summary: List video ownership changes
1605 - Video Ownership Change
1610 description: successful operation
1612 '/videos/ownership/{id}/accept':
1614 summary: Accept ownership change request
1616 - Video Ownership Change
1620 - $ref: '#/components/parameters/idOrUUID'
1623 description: successful operation
1625 description: cannot terminate an ownership change of another user
1627 description: video ownership change not found
1629 '/videos/ownership/{id}/refuse':
1631 summary: Refuse ownership change request
1633 - Video Ownership Change
1637 - $ref: '#/components/parameters/idOrUUID'
1640 description: successful operation
1642 description: cannot terminate an ownership change of another user
1644 description: video ownership change not found
1646 '/videos/{id}/give-ownership':
1648 summary: Request ownership change
1650 - Video Ownership Change
1654 - $ref: '#/components/parameters/idOrUUID'
1658 application/x-www-form-urlencoded:
1668 description: successful operation
1670 description: changing video ownership to a remote account is not supported yet
1672 description: video not found
1676 summary: List videos
1677 operationId: getVideos
1681 - $ref: '#/components/parameters/categoryOneOf'
1682 - $ref: '#/components/parameters/isLive'
1683 - $ref: '#/components/parameters/tagsOneOf'
1684 - $ref: '#/components/parameters/tagsAllOf'
1685 - $ref: '#/components/parameters/licenceOneOf'
1686 - $ref: '#/components/parameters/languageOneOf'
1687 - $ref: '#/components/parameters/nsfw'
1688 - $ref: '#/components/parameters/isLocal'
1689 - $ref: '#/components/parameters/include'
1690 - $ref: '#/components/parameters/privacyOneOf'
1691 - $ref: '#/components/parameters/hasHLSFiles'
1692 - $ref: '#/components/parameters/hasWebtorrentFiles'
1693 - $ref: '#/components/parameters/skipCount'
1694 - $ref: '#/components/parameters/start'
1695 - $ref: '#/components/parameters/count'
1696 - $ref: '#/components/parameters/videosSort'
1699 description: successful operation
1703 $ref: '#/components/schemas/VideoListResponse'
1707 summary: List available video categories
1708 operationId: getCategories
1713 description: successful operation
1722 externalValue: https://peertube2.cpy.re/api/v1/videos/categories
1726 summary: List available video licences
1727 operationId: getLicences
1732 description: successful operation
1741 externalValue: https://peertube2.cpy.re/api/v1/videos/licences
1745 summary: List available video languages
1746 operationId: getLanguages
1751 description: successful operation
1760 externalValue: https://peertube2.cpy.re/api/v1/videos/languages
1764 summary: List available video privacy policies
1765 operationId: getPrivacyPolicies
1770 description: successful operation
1779 externalValue: https://peertube2.cpy.re/api/v1/videos/privacies
1783 summary: Update a video
1784 operationId: putVideo
1790 - $ref: '#/components/parameters/idOrUUID'
1793 description: successful operation
1796 multipart/form-data:
1801 description: Video thumbnail file
1805 description: Video preview file
1809 $ref: '#/components/schemas/VideoCategorySet'
1811 $ref: '#/components/schemas/VideoLicenceSet'
1813 $ref: '#/components/schemas/VideoLanguageSet'
1815 $ref: '#/components/schemas/VideoPrivacySet'
1817 description: Video description
1820 description: Whether or not we wait transcoding before publish the video
1823 description: A text tell the audience how to support the video creator
1824 example: Please support our work on https://soutenir.framasoft.org/en/ <3
1827 description: Whether or not this video contains sensitive content
1830 description: Video name
1835 description: Video tags (maximum 5 tags each between 2 and 30 characters)
1844 description: Enable or disable comments for this video
1847 description: Enable or disable downloading for this video
1849 originallyPublishedAt:
1850 description: Date when the content was originally published
1854 $ref: '#/components/schemas/VideoScheduledUpdate'
1857 contentType: image/jpeg
1859 contentType: image/jpeg
1861 summary: Get a video
1862 operationId: getVideo
1866 - $ref: '#/components/parameters/idOrUUID'
1869 description: successful operation
1873 $ref: '#/components/schemas/VideoDetails'
1875 summary: Delete a video
1876 operationId: delVideo
1882 - $ref: '#/components/parameters/idOrUUID'
1885 description: successful operation
1887 '/videos/{id}/description':
1889 summary: Get complete video description
1890 operationId: getVideoDesc
1894 - $ref: '#/components/parameters/idOrUUID'
1897 description: successful operation
1906 **[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)**
1908 '/videos/{id}/source':
1910 summary: Get video source file metadata
1911 operationId: getVideoSource
1915 - $ref: '#/components/parameters/idOrUUID'
1918 description: successful operation
1922 $ref: '#/components/schemas/VideoSource'
1924 '/videos/{id}/views':
1926 summary: Notify user is watching a video
1927 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.
1928 operationId: addView
1932 - $ref: '#/components/parameters/idOrUUID'
1937 $ref: '#/components/schemas/UserViewingVideo'
1941 description: successful operation
1943 '/videos/{id}/watching':
1945 summary: Set watching progress of a video
1947 description: This endpoint has been deprecated. Use `/videos/{id}/views` instead
1953 - $ref: '#/components/parameters/idOrUUID'
1958 $ref: '#/components/schemas/UserViewingVideo'
1962 description: successful operation
1964 '/videos/{id}/stats/overall':
1966 summary: Get overall stats of a video
1972 - $ref: '#/components/parameters/idOrUUID'
1975 description: Filter stats by start date
1981 description: Filter stats by end date
1987 description: successful operation
1991 $ref: '#/components/schemas/VideoStatsOverall'
1993 '/videos/{id}/stats/retention':
1995 summary: Get retention stats of a video
2001 - $ref: '#/components/parameters/idOrUUID'
2004 description: successful operation
2008 $ref: '#/components/schemas/VideoStatsRetention'
2010 '/videos/{id}/stats/timeseries/{metric}':
2012 summary: Get timeserie stats of a video
2018 - $ref: '#/components/parameters/idOrUUID'
2023 description: The metric to get
2028 - 'aggregateWatchTime'
2031 description: Filter stats by start date
2037 description: Filter stats by end date
2043 description: successful operation
2047 $ref: '#/components/schemas/VideoStatsTimeserie'
2051 summary: Upload a video
2052 description: Uses a single request to upload a video.
2053 operationId: uploadLegacy
2061 description: successful operation
2065 $ref: '#/components/schemas/VideoUploadResponse'
2067 description: video didn't pass upload filter
2069 description: upload has timed out
2071 x-summary: video file too large, due to quota or max body size limit set by the reverse-proxy
2073 If the response has no body, it means the reverse-proxy didn't let it through. Otherwise disambiguate via `type`:
2074 - `quota_reached` for quota limits whether daily or global
2076 X-File-Maximum-Size:
2080 description: Maximum file size for the video
2082 description: video type unsupported
2084 description: video unreadable
2087 multipart/form-data:
2089 $ref: '#/components/schemas/VideoUploadRequestLegacy'
2092 contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream
2094 contentType: image/jpeg
2096 contentType: image/jpeg
2101 USERNAME="<your_username>"
2102 PASSWORD="<your_password>"
2103 FILE_PATH="<your_file_path>"
2104 CHANNEL_ID="<your_channel_id>"
2106 API="https://peertube2.cpy.re/api/v1"
2109 client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
2110 client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
2111 token=$(curl -s "$API/users/token" \
2112 --data client_id="$client_id" \
2113 --data client_secret="$client_secret" \
2114 --data grant_type=password \
2115 --data username="$USERNAME" \
2116 --data password="$PASSWORD" \
2117 | jq -r ".access_token")
2120 curl -s "$API/videos/upload" \
2121 -H "Authorization: Bearer $token" \
2123 --form videofile=@"$FILE_PATH" \
2124 --form channelId=$CHANNEL_ID \
2127 /videos/upload-resumable:
2129 summary: Initialize the resumable upload of a video
2130 description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to initialize the upload of a video
2131 operationId: uploadResumableInit
2138 - name: X-Upload-Content-Length
2144 description: Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.
2145 - name: X-Upload-Content-Type
2152 description: MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.
2157 $ref: '#/components/schemas/VideoUploadRequestResumable'
2160 description: file already exists, send a [`resume`](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) request instead
2162 description: created
2168 example: /api/v1/videos/upload-resumable?upload_id=471e97554f21dec3b8bb5d4602939c51
2174 x-summary: video file too large, due to quota, absolute max file size or concurrent partial upload limit
2176 Disambiguate via `type`:
2177 - `max_file_size_reached` for the absolute file size limit
2178 - `quota_reached` for quota limits whether daily or global
2180 description: video type unsupported
2182 summary: Send chunk for the resumable upload of a video
2183 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
2184 operationId: uploadResumable
2195 Created session id to proceed with. If you didn't send chunks in the last hour, it is
2196 not valid anymore and you need to initialize a new upload.
2199 - name: Content-Range
2203 example: bytes 0-262143/2469036
2206 Specifies the bytes in the file that the request is uploading.
2208 For example, a value of `bytes 0-262143/1000000` shows that the request is sending the first
2209 262144 bytes (256 x 1024) in a 2,469,036 byte file.
2210 - name: Content-Length
2217 Size of the chunk that the request is sending.
2219 Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from
2220 1048576 bytes (~1MB) and increases or reduces size depending on connection health.
2223 application/octet-stream:
2229 description: last chunk received
2237 $ref: '#/components/schemas/VideoUploadResponse'
2239 description: resume incomplete
2244 example: bytes=0-262143
2250 description: video didn't pass upload filter
2252 description: upload not found
2254 description: chunk doesn't match range
2256 description: video unreadable
2258 description: too many concurrent requests
2260 description: upload is already being processed
2267 summary: Cancel the resumable upload of a video, deleting any data uploaded so far
2268 description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to cancel the upload of a video
2269 operationId: uploadResumableCancel
2280 Created session id to proceed with. If you didn't send chunks in the last 12 hours, it is
2281 not valid anymore and the upload session has already been deleted with its data ;-)
2284 - name: Content-Length
2292 description: upload cancelled
2299 description: upload not found
2303 summary: Import a video
2304 description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
2305 operationId: importVideo
2313 multipart/form-data:
2315 $ref: '#/components/schemas/VideoCreateImport'
2318 contentType: application/x-bittorrent
2320 contentType: image/jpeg
2322 contentType: image/jpeg
2325 description: successful operation
2329 $ref: '#/components/schemas/VideoUploadResponse'
2331 description: '`magnetUri` or `targetUrl` or a torrent file missing'
2333 description: video didn't pass pre-import filter
2335 description: HTTP or Torrent/magnetURI import not enabled
2337 /videos/imports/{id}/cancel:
2339 summary: Cancel video import
2340 description: Cancel a pending video import
2346 - $ref: '#/components/parameters/id'
2349 description: successful operation
2351 /videos/imports/{id}:
2353 summary: Delete video import
2354 description: Delete ended video import
2360 - $ref: '#/components/parameters/id'
2363 description: successful operation
2367 summary: Create a live
2368 operationId: addLive
2376 description: successful operation
2380 $ref: '#/components/schemas/VideoUploadResponse'
2382 x-summary: validation error, or conflicting `saveReplay` and `permanentLive` parameter set
2384 Disambiguate via `type`:
2385 - default type for a validation error
2386 - `live_conflicting_permanent_and_save_replay` for conflicting parameters set
2388 x-summary: live is not enabled, allow replay is not enabled, or max instance/user live videos limit is exceeded
2390 Disambiguate via `type`:
2391 - `live_not_enabled` for a disabled live feature
2392 - `live_not_allowing_replay` for a disabled replay feature
2393 - `max_instance_lives_limit_reached` for the absolute concurrent live limit
2394 - `max_user_lives_limit_reached` for the user concurrent live limit
2397 multipart/form-data:
2402 description: Channel id that will contain this live video
2407 description: User can stream multiple times in a permanent live
2410 description: User can select live latency mode if enabled by the instance
2411 $ref: '#/components/schemas/LiveVideoLatencyMode'
2413 description: Live video/replay thumbnail file
2417 description: Live video/replay preview file
2421 $ref: '#/components/schemas/VideoPrivacySet'
2423 $ref: '#/components/schemas/VideoCategorySet'
2425 $ref: '#/components/schemas/VideoLicenceSet'
2427 $ref: '#/components/schemas/VideoLanguageSet'
2429 description: Live video/replay description
2432 description: A text tell the audience how to support the creator
2433 example: Please support our work on https://soutenir.framasoft.org/en/ <3
2436 description: Whether or not this live video/replay contains sensitive content
2439 description: Live video/replay name
2444 description: Live video/replay tags (maximum 5 tags each between 2 and 30 characters)
2453 description: Enable or disable comments for this live video/replay
2456 description: Enable or disable downloading for the replay of this live video
2463 contentType: image/jpeg
2465 contentType: image/jpeg
2469 summary: Get information about a live
2470 operationId: getLiveId
2477 - $ref: '#/components/parameters/idOrUUID'
2480 description: successful operation
2484 $ref: '#/components/schemas/LiveVideoResponse'
2486 summary: Update information about a live
2487 operationId: updateLiveId
2494 - $ref: '#/components/parameters/idOrUUID'
2499 $ref: '#/components/schemas/LiveVideoUpdate'
2502 description: successful operation
2504 description: bad parameters or trying to update a live that has already started
2506 description: trying to save replay of the live but saving replay is not enabled on the instance
2507 /videos/live/{id}/sessions:
2509 summary: List live sessions
2510 description: List all sessions created in a particular live
2516 - $ref: '#/components/parameters/idOrUUID'
2519 description: successful operation
2531 $ref: '#/components/schemas/LiveVideoSessionResponse'
2532 /videos/{id}/live-session:
2534 summary: Get live session of a replay
2535 description: If the video is a replay of a live, you can find the associated live session using this endpoint
2541 - $ref: '#/components/parameters/idOrUUID'
2544 description: successful operation
2548 $ref: '#/components/schemas/LiveVideoSessionResponse'
2552 summary: List my abuses
2553 operationId: getMyAbuses
2562 description: only list the report with this id
2568 $ref: '#/components/schemas/AbuseStateSet'
2569 - $ref: '#/components/parameters/abusesSort'
2570 - $ref: '#/components/parameters/start'
2571 - $ref: '#/components/parameters/count'
2574 description: successful operation
2586 $ref: '#/components/schemas/Abuse'
2590 summary: List abuses
2591 operationId: getAbuses
2601 description: only list the report with this id
2604 - name: predefinedReason
2606 description: predefined reason the listed reports should contain
2608 $ref: '#/components/schemas/PredefinedAbuseReasons'
2611 description: plain search that will match with video titles, reporter names and more
2617 $ref: '#/components/schemas/AbuseStateSet'
2618 - name: searchReporter
2620 description: only list reports of a specific reporter
2623 - name: searchReportee
2624 description: only list reports of a specific reportee
2630 description: only list reports of a specific video
2633 - name: searchVideoChannel
2635 description: only list reports of a specific video channel
2640 description: only list deleted or blocklisted videos
2648 description: only list account, comment or video reports
2655 - $ref: '#/components/parameters/start'
2656 - $ref: '#/components/parameters/count'
2657 - $ref: '#/components/parameters/abusesSort'
2660 description: successful operation
2672 $ref: '#/components/schemas/Abuse'
2674 summary: Report an abuse
2687 description: Reason why the user reports this video
2692 $ref: '#/components/schemas/PredefinedAbuseReasons'
2697 description: Video id to report
2699 - $ref: '#/components/schemas/Video/properties/id'
2703 description: Timestamp in the video that marks the beginning of the report
2708 description: Timestamp in the video that marks the ending of the report
2714 description: Comment id to report
2716 - $ref: '#/components/schemas/VideoComment/properties/id'
2721 description: Account id to report
2727 description: successful operation
2737 $ref: '#/components/schemas/id'
2739 description: incorrect request parameters
2741 '/abuses/{abuseId}':
2743 summary: Update an abuse
2751 - $ref: '#/components/parameters/abuseId'
2759 $ref: '#/components/schemas/AbuseStateSet'
2762 description: Update the report comment visible only to the moderation team
2767 description: successful operation
2769 description: abuse not found
2773 summary: Delete an abuse
2779 - $ref: '#/components/parameters/abuseId'
2782 description: successful operation
2784 description: block not found
2786 '/abuses/{abuseId}/messages':
2788 summary: List messages of an abuse
2794 - $ref: '#/components/parameters/abuseId'
2797 description: successful operation
2809 $ref: '#/components/schemas/AbuseMessage'
2811 summary: Add message to an abuse
2817 - $ref: '#/components/parameters/abuseId'
2826 description: Message to send
2834 description: successful operation
2836 description: incorrect request parameters
2838 '/abuses/{abuseId}/messages/{abuseMessageId}':
2840 summary: Delete an abuse message
2846 - $ref: '#/components/parameters/abuseId'
2847 - $ref: '#/components/parameters/abuseMessageId'
2850 description: successful operation
2852 '/videos/{id}/blacklist':
2854 summary: Block a video
2855 operationId: addVideoBlock
2863 - $ref: '#/components/parameters/idOrUUID'
2866 description: successful operation
2868 summary: Unblock a video by its id
2869 operationId: delVideoBlock
2877 - $ref: '#/components/parameters/idOrUUID'
2880 description: successful operation
2882 description: block not found
2888 summary: List video blocks
2889 operationId: getVideoBlocks
2898 list only blocks that match this type:
2902 - `2`: automatic block that needs review
2910 description: plain search that will match with video titles, and more
2913 - $ref: '#/components/parameters/start'
2914 - $ref: '#/components/parameters/count'
2915 - $ref: '#/components/parameters/blacklistsSort'
2918 description: successful operation
2930 $ref: '#/components/schemas/VideoBlacklist'
2932 /videos/{id}/captions:
2934 summary: List captions of a video
2935 operationId: getVideoCaptions
2939 - $ref: '#/components/parameters/idOrUUID'
2942 description: successful operation
2954 $ref: '#/components/schemas/VideoCaption'
2956 /videos/{id}/captions/{captionLanguage}:
2958 summary: Add or replace a video caption
2959 operationId: addVideoCaption
2966 - $ref: '#/components/parameters/idOrUUID'
2967 - $ref: '#/components/parameters/captionLanguage'
2970 multipart/form-data:
2975 description: The file to upload.
2980 contentType: text/vtt, application/x-subrip, text/plain
2983 description: successful operation
2985 description: video or language not found
2987 summary: Delete a video caption
2988 operationId: delVideoCaption
2995 - $ref: '#/components/parameters/idOrUUID'
2996 - $ref: '#/components/parameters/captionLanguage'
2999 description: successful operation
3001 description: video or language or caption for that language not found
3005 summary: List video channels
3006 operationId: getVideoChannels
3010 - $ref: '#/components/parameters/start'
3011 - $ref: '#/components/parameters/count'
3012 - $ref: '#/components/parameters/sort'
3015 description: successful operation
3019 $ref: '#/components/schemas/VideoChannelList'
3021 summary: Create a video channel
3022 operationId: addVideoChannel
3029 description: successful operation
3039 $ref: '#/components/schemas/id'
3044 $ref: '#/components/schemas/VideoChannelCreate'
3046 '/video-channels/{channelHandle}':
3048 summary: Get a video channel
3049 operationId: getVideoChannel
3053 - $ref: '#/components/parameters/channelHandle'
3056 description: successful operation
3060 $ref: '#/components/schemas/VideoChannel'
3062 summary: Update a video channel
3063 operationId: putVideoChannel
3069 - $ref: '#/components/parameters/channelHandle'
3072 description: successful operation
3077 $ref: '#/components/schemas/VideoChannelUpdate'
3079 summary: Delete a video channel
3080 operationId: delVideoChannel
3086 - $ref: '#/components/parameters/channelHandle'
3089 description: successful operation
3091 '/video-channels/{channelHandle}/videos':
3093 summary: List videos of a video channel
3094 operationId: getVideoChannelVideos
3099 - $ref: '#/components/parameters/channelHandle'
3100 - $ref: '#/components/parameters/categoryOneOf'
3101 - $ref: '#/components/parameters/isLive'
3102 - $ref: '#/components/parameters/tagsOneOf'
3103 - $ref: '#/components/parameters/tagsAllOf'
3104 - $ref: '#/components/parameters/licenceOneOf'
3105 - $ref: '#/components/parameters/languageOneOf'
3106 - $ref: '#/components/parameters/nsfw'
3107 - $ref: '#/components/parameters/isLocal'
3108 - $ref: '#/components/parameters/include'
3109 - $ref: '#/components/parameters/privacyOneOf'
3110 - $ref: '#/components/parameters/hasHLSFiles'
3111 - $ref: '#/components/parameters/hasWebtorrentFiles'
3112 - $ref: '#/components/parameters/skipCount'
3113 - $ref: '#/components/parameters/start'
3114 - $ref: '#/components/parameters/count'
3115 - $ref: '#/components/parameters/videosSort'
3118 description: successful operation
3122 $ref: '#/components/schemas/VideoListResponse'
3124 '/video-channels/{channelHandle}/followers':
3128 summary: 'List followers of a video channel'
3131 operationId: getVideoChannelFollowers
3133 - $ref: '#/components/parameters/channelHandle'
3134 - $ref: '#/components/parameters/start'
3135 - $ref: '#/components/parameters/count'
3136 - $ref: '#/components/parameters/followersSort'
3137 - $ref: '#/components/parameters/search'
3140 description: successful operation
3152 $ref: '#/components/schemas/Follow'
3154 '/video-channels/{channelHandle}/avatar/pick':
3156 summary: Update channel avatar
3162 - $ref: '#/components/parameters/channelHandle'
3165 description: successful operation
3174 $ref: '#/components/schemas/ActorImage'
3176 description: image file too large
3178 X-File-Maximum-Size:
3182 description: Maximum file size for the avatar
3185 multipart/form-data:
3190 description: The file to upload.
3195 contentType: image/png, image/jpeg
3197 '/video-channels/{channelHandle}/avatar':
3199 summary: Delete channel avatar
3205 - $ref: '#/components/parameters/channelHandle'
3208 description: successful operation
3210 '/video-channels/{channelHandle}/banner/pick':
3212 summary: Update channel banner
3218 - $ref: '#/components/parameters/channelHandle'
3221 description: successful operation
3230 $ref: '#/components/schemas/ActorImage'
3232 description: image file too large
3234 X-File-Maximum-Size:
3238 description: Maximum file size for the banner
3241 multipart/form-data:
3246 description: The file to upload.
3251 contentType: image/png, image/jpeg
3253 '/video-channels/{channelHandle}/banner':
3255 summary: Delete channel banner
3261 - $ref: '#/components/parameters/channelHandle'
3264 description: successful operation
3266 /video-playlists/privacies:
3268 summary: List available playlist privacy policies
3269 operationId: getPlaylistPrivacyPolicies
3274 description: successful operation
3283 externalValue: https://peertube2.cpy.re/api/v1/video-playlists/privacies
3287 summary: List video playlists
3288 operationId: getPlaylists
3292 - $ref: '#/components/parameters/start'
3293 - $ref: '#/components/parameters/count'
3294 - $ref: '#/components/parameters/sort'
3297 description: successful operation
3309 $ref: '#/components/schemas/VideoPlaylist'
3311 summary: Create a video playlist
3312 description: If the video playlist is set as public, `videoChannelId` is mandatory.
3313 operationId: addPlaylist
3320 description: successful operation
3330 $ref: '#/components/schemas/VideoPlaylist/properties/id'
3332 $ref: '#/components/schemas/VideoPlaylist/properties/uuid'
3334 $ref: '#/components/schemas/VideoPlaylist/properties/shortUUID'
3337 multipart/form-data:
3342 description: Video playlist display name
3347 description: Video playlist thumbnail file
3351 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
3353 description: Video playlist description
3359 - $ref: '#/components/schemas/id'
3360 description: Video channel in which the playlist will be published
3365 contentType: image/jpeg
3367 /video-playlists/{playlistId}:
3369 summary: Get a video playlist
3373 - $ref: '#/components/parameters/playlistId'
3376 description: successful operation
3380 $ref: '#/components/schemas/VideoPlaylist'
3382 summary: Update a video playlist
3383 description: 'If the video playlist is set as public, the playlist must have a assigned channel.'
3390 description: successful operation
3392 - $ref: '#/components/parameters/playlistId'
3395 multipart/form-data:
3400 description: Video playlist display name
3405 description: Video playlist thumbnail file
3409 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
3411 description: Video playlist description
3415 - $ref: '#/components/schemas/id'
3416 description: Video channel in which the playlist will be published
3419 contentType: image/jpeg
3421 summary: Delete a video playlist
3427 - $ref: '#/components/parameters/playlistId'
3430 description: successful operation
3432 /video-playlists/{playlistId}/videos:
3434 summary: 'List videos of a playlist'
3435 operationId: getVideoPlaylistVideos
3440 - $ref: '#/components/parameters/playlistId'
3441 - $ref: '#/components/parameters/start'
3442 - $ref: '#/components/parameters/count'
3445 description: successful operation
3449 $ref: '#/components/schemas/VideoListResponse'
3451 summary: Add a video in a playlist
3452 operationId: addVideoPlaylistVideo
3459 - $ref: '#/components/parameters/playlistId'
3462 description: successful operation
3468 videoPlaylistElement:
3482 - $ref: '#/components/schemas/Video/properties/uuid'
3483 - $ref: '#/components/schemas/Video/properties/id'
3484 description: Video to add in the playlist
3488 description: Start the video at this specific timestamp
3492 description: Stop the video at this specific timestamp
3496 /video-playlists/{playlistId}/videos/reorder:
3498 summary: 'Reorder a playlist'
3499 operationId: reorderVideoPlaylist
3505 - $ref: '#/components/parameters/playlistId'
3508 description: successful operation
3517 description: 'Start position of the element to reorder'
3519 insertAfterPosition:
3521 description: 'New position for the block to reorder, to add the block before the first element'
3525 description: 'How many element from `startPosition` to reorder'
3529 - insertAfterPosition
3531 /video-playlists/{playlistId}/videos/{playlistElementId}:
3533 summary: Update a playlist element
3534 operationId: putVideoPlaylistVideo
3540 - $ref: '#/components/parameters/playlistId'
3541 - $ref: '#/components/parameters/playlistElementId'
3544 description: successful operation
3554 description: Start the video at this specific timestamp
3558 description: Stop the video at this specific timestamp
3560 summary: Delete an element from a playlist
3561 operationId: delVideoPlaylistVideo
3567 - $ref: '#/components/parameters/playlistId'
3568 - $ref: '#/components/parameters/playlistElementId'
3571 description: successful operation
3573 '/users/me/video-playlists/videos-exist':
3575 summary: Check video exists in my playlists
3584 description: The video ids to check
3588 $ref: '#/components/schemas/Video/properties/id'
3591 description: successful operation
3613 '/accounts/{name}/video-channels':
3615 summary: List video channels of an account
3620 - $ref: '#/components/parameters/name'
3623 description: include daily view statistics for the last 30 days and total views (only if authentified as the account user)
3626 - $ref: '#/components/parameters/start'
3627 - $ref: '#/components/parameters/count'
3628 - $ref: '#/components/parameters/sort'
3631 description: successful operation
3635 $ref: '#/components/schemas/VideoChannelList'
3637 '/accounts/{name}/ratings':
3639 summary: List ratings of an account
3645 - $ref: '#/components/parameters/name'
3646 - $ref: '#/components/parameters/start'
3647 - $ref: '#/components/parameters/count'
3648 - $ref: '#/components/parameters/sort'
3652 description: Optionally filter which ratings to retrieve
3660 description: successful operation
3666 $ref: '#/components/schemas/VideoRating'
3668 '/videos/{id}/comment-threads':
3670 summary: List threads of a video
3674 - $ref: '#/components/parameters/idOrUUID'
3675 - $ref: '#/components/parameters/start'
3676 - $ref: '#/components/parameters/count'
3677 - $ref: '#/components/parameters/commentsSort'
3680 description: successful operation
3684 $ref: '#/components/schemas/CommentThreadResponse'
3686 summary: Create a thread
3692 - $ref: '#/components/parameters/idOrUUID'
3695 description: successful operation
3699 $ref: '#/components/schemas/CommentThreadPostResponse'
3701 description: video does not exist
3710 - $ref: '#/components/schemas/VideoComment/properties/text'
3716 '/videos/{id}/comment-threads/{threadId}':
3718 summary: Get a thread
3722 - $ref: '#/components/parameters/idOrUUID'
3723 - $ref: '#/components/parameters/threadId'
3726 description: successful operation
3730 $ref: '#/components/schemas/VideoCommentThreadTree'
3732 '/videos/{id}/comments/{commentId}':
3734 summary: Reply to a thread of a video
3740 - $ref: '#/components/parameters/idOrUUID'
3741 - $ref: '#/components/parameters/commentId'
3744 description: successful operation
3748 $ref: '#/components/schemas/CommentThreadPostResponse'
3750 description: thread or video does not exist
3759 - $ref: '#/components/schemas/VideoComment/properties/text'
3765 summary: Delete a comment or a reply
3771 - $ref: '#/components/parameters/idOrUUID'
3772 - $ref: '#/components/parameters/commentId'
3775 description: successful operation
3777 description: cannot remove comment of another user
3779 description: comment or video does not exist
3781 description: comment is already deleted
3783 '/videos/{id}/rate':
3785 summary: Like/dislike a video
3791 - $ref: '#/components/parameters/idOrUUID'
3807 description: successful operation
3809 description: video does not exist
3813 summary: Delete video HLS files
3819 operationId: delVideoHLS
3821 - $ref: '#/components/parameters/idOrUUID'
3824 description: successful operation
3826 description: video does not exist
3827 '/videos/{id}/webtorrent':
3829 summary: Delete video WebTorrent files
3835 operationId: delVideoWebTorrent
3837 - $ref: '#/components/parameters/idOrUUID'
3840 description: successful operation
3842 description: video does not exist
3844 '/videos/{id}/transcoding':
3846 summary: Create a transcoding job
3852 operationId: createVideoTranscoding
3854 - $ref: '#/components/parameters/idOrUUID'
3870 description: successful operation
3872 description: video does not exist
3878 summary: Search videos
3879 operationId: searchVideos
3884 allowEmptyValue: false
3886 String to search. If the user can make a remote URI search, and the string is an URI then the
3887 PeerTube instance will fetch the remote object and add it to its database. Then,
3888 you can use the REST API to fetch the complete video information and interact with it.
3891 - $ref: '#/components/parameters/categoryOneOf'
3892 - $ref: '#/components/parameters/isLive'
3893 - $ref: '#/components/parameters/tagsOneOf'
3894 - $ref: '#/components/parameters/tagsAllOf'
3895 - $ref: '#/components/parameters/licenceOneOf'
3896 - $ref: '#/components/parameters/languageOneOf'
3897 - $ref: '#/components/parameters/nsfw'
3898 - $ref: '#/components/parameters/isLocal'
3899 - $ref: '#/components/parameters/include'
3900 - $ref: '#/components/parameters/privacyOneOf'
3901 - $ref: '#/components/parameters/hasHLSFiles'
3902 - $ref: '#/components/parameters/hasWebtorrentFiles'
3903 - $ref: '#/components/parameters/skipCount'
3904 - $ref: '#/components/parameters/start'
3905 - $ref: '#/components/parameters/count'
3906 - $ref: '#/components/parameters/searchTarget'
3907 - $ref: '#/components/parameters/videosSearchSort'
3910 description: Get videos that are published after this date
3916 description: Get videos that are published before this date
3920 - name: originallyPublishedStartDate
3922 description: Get videos that are originally published after this date
3926 - name: originallyPublishedEndDate
3928 description: Get videos that are originally published before this date
3934 description: Get videos that have this minimum duration
3939 description: Get videos that have this maximum duration
3943 'searchTarget === search-index':
3944 $ref: '#/components/callbacks/searchIndex'
3947 description: successful operation
3951 $ref: '#/components/schemas/VideoListResponse'
3953 description: search index unavailable
3955 /search/video-channels:
3959 summary: Search channels
3960 operationId: searchChannels
3966 String to search. If the user can make a remote URI search, and the string is an URI then the
3967 PeerTube instance will fetch the remote object and add it to its database. Then,
3968 you can use the REST API to fetch the complete channel information and interact with it.
3971 - $ref: '#/components/parameters/start'
3972 - $ref: '#/components/parameters/count'
3973 - $ref: '#/components/parameters/searchTarget'
3974 - $ref: '#/components/parameters/sort'
3976 'searchTarget === search-index':
3977 $ref: '#/components/callbacks/searchIndex'
3980 description: successful operation
3984 $ref: '#/components/schemas/VideoChannelList'
3986 description: search index unavailable
3988 /search/video-playlists:
3992 summary: Search playlists
3993 operationId: searchPlaylists
3999 String to search. If the user can make a remote URI search, and the string is an URI then the
4000 PeerTube instance will fetch the remote object and add it to its database. Then,
4001 you can use the REST API to fetch the complete playlist information and interact with it.
4004 - $ref: '#/components/parameters/start'
4005 - $ref: '#/components/parameters/count'
4006 - $ref: '#/components/parameters/searchTarget'
4007 - $ref: '#/components/parameters/sort'
4009 'searchTarget === search-index':
4010 $ref: '#/components/callbacks/searchIndex'
4013 description: successful operation
4025 $ref: '#/components/schemas/VideoPlaylist'
4027 description: search index unavailable
4034 summary: Get block status of accounts/hosts
4039 description: 'Check if these accounts are blocked'
4040 example: [ 'goofy@example.com', 'donald@example.com' ]
4048 description: 'Check if these hosts are blocked'
4049 example: [ 'example.com' ]
4056 description: successful operation
4060 $ref: '#/components/schemas/BlockStatus'
4062 /server/blocklist/accounts:
4066 summary: List account blocks
4071 - $ref: '#/components/parameters/start'
4072 - $ref: '#/components/parameters/count'
4073 - $ref: '#/components/parameters/sort'
4076 description: successful operation
4080 summary: Block an account
4092 example: chocobozzz@example.org
4093 description: account to block, in the form `username@domain`
4098 description: successful operation
4100 description: self-blocking forbidden
4102 '/server/blocklist/accounts/{accountName}':
4106 summary: Unblock an account by its handle
4114 description: account to unblock, in the form `username@domain`
4119 description: successful operation
4121 description: account or account block does not exist
4123 /server/blocklist/servers:
4127 summary: List server blocks
4132 - $ref: '#/components/parameters/start'
4133 - $ref: '#/components/parameters/count'
4134 - $ref: '#/components/parameters/sort'
4137 description: successful operation
4141 summary: Block a server
4154 description: server domain to block
4159 description: successful operation
4161 description: self-blocking forbidden
4163 '/server/blocklist/servers/{host}':
4167 summary: Unblock a server by its domain
4175 description: server domain to unblock
4181 description: successful operation
4183 description: account block does not exist
4185 /server/redundancy/{host}:
4188 - Instance Redundancy
4189 summary: Update a server redundancy policy
4197 description: server domain to mirror
4209 description: allow mirroring of the host's local videos
4214 description: successful operation
4216 description: server is not already known
4218 /server/redundancy/videos:
4222 summary: List videos being mirrored
4223 operationId: getMirroredVideos
4231 description: direction of the mirror
4237 - $ref: '#/components/parameters/start'
4238 - $ref: '#/components/parameters/count'
4239 - $ref: '#/components/parameters/videoRedundanciesSort'
4242 description: successful operation
4248 $ref: '#/components/schemas/VideoRedundancy'
4252 summary: Mirror a video
4253 operationId: putMirroredVideo
4264 $ref: '#/components/schemas/Video/properties/id'
4269 description: successful operation
4271 description: cannot mirror a local video
4273 description: video does not exist
4275 description: video is already mirrored
4277 /server/redundancy/videos/{redundancyId}:
4281 summary: Delete a mirror done on a video
4282 operationId: delMirroredVideo
4287 - name: redundancyId
4290 description: id of an existing redundancy on a video
4295 description: successful operation
4297 description: video redundancy not found
4303 summary: Get instance stats
4304 description: Get instance public statistics. This endpoint is cached.
4305 operationId: getInstanceStats
4308 description: successful operation
4312 $ref: '#/components/schemas/ServerStats'
4314 /server/logs/client:
4318 summary: Send client log
4319 operationId: sendClientLog
4324 $ref: '#/components/schemas/SendClientLog'
4327 description: successful operation
4333 summary: Get instance logs
4334 operationId: getInstanceLogs
4340 description: successful operation
4352 summary: Get instance audit logs
4353 operationId: getInstanceAuditLogs
4359 description: successful operation
4367 '/feeds/video-comments.{format}':
4371 summary: List comments on videos
4372 operationId: getSyndicatedComments
4377 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4390 description: 'limit listing to a specific video'
4395 description: 'limit listing to a specific account'
4400 description: 'limit listing to a specific account'
4403 - name: videoChannelId
4405 description: 'limit listing to a specific video channel'
4408 - name: videoChannelName
4410 description: 'limit listing to a specific video channel'
4415 description: successful operation
4420 default: 'max-age=900' # 15 min cache
4424 $ref: '#/components/schemas/VideoCommentsForXML'
4427 externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
4428 application/rss+xml:
4430 $ref: '#/components/schemas/VideoCommentsForXML'
4433 externalValue: https://peertube2.cpy.re/feeds/video-comments.rss?filter=local
4436 $ref: '#/components/schemas/VideoCommentsForXML'
4439 externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
4440 application/atom+xml:
4442 $ref: '#/components/schemas/VideoCommentsForXML'
4445 externalValue: https://peertube2.cpy.re/feeds/video-comments.atom?filter=local
4451 externalValue: https://peertube2.cpy.re/feeds/video-comments.json?filter=local
4453 x-summary: field inconsistencies
4456 - videoId filter is mixed with a channel filter
4458 description: video, video channel or account not found
4460 description: accept header unsupported
4462 '/feeds/videos.{format}':
4466 summary: List videos
4467 operationId: getSyndicatedVideos
4472 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4485 description: 'limit listing to a specific account'
4490 description: 'limit listing to a specific account'
4493 - name: videoChannelId
4495 description: 'limit listing to a specific video channel'
4498 - name: videoChannelName
4500 description: 'limit listing to a specific video channel'
4503 - $ref: '#/components/parameters/sort'
4504 - $ref: '#/components/parameters/nsfw'
4505 - $ref: '#/components/parameters/isLocal'
4506 - $ref: '#/components/parameters/include'
4507 - $ref: '#/components/parameters/privacyOneOf'
4508 - $ref: '#/components/parameters/hasHLSFiles'
4509 - $ref: '#/components/parameters/hasWebtorrentFiles'
4512 description: successful operation
4517 default: 'max-age=900' # 15 min cache
4521 $ref: '#/components/schemas/VideosForXML'
4524 externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
4525 application/rss+xml:
4527 $ref: '#/components/schemas/VideosForXML'
4530 externalValue: https://peertube2.cpy.re/feeds/videos.rss?filter=local
4533 $ref: '#/components/schemas/VideosForXML'
4536 externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
4537 application/atom+xml:
4539 $ref: '#/components/schemas/VideosForXML'
4542 externalValue: https://peertube2.cpy.re/feeds/videos.atom?filter=local
4548 externalValue: https://peertube2.cpy.re/feeds/videos.json?filter=local
4550 description: video channel or account not found
4552 description: accept header unsupported
4554 '/feeds/subscriptions.{format}':
4559 summary: List videos of subscriptions tied to a token
4560 operationId: getSyndicatedSubscriptionVideos
4565 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4578 description: limit listing to a specific account
4584 description: private token allowing access
4588 - $ref: '#/components/parameters/sort'
4589 - $ref: '#/components/parameters/nsfw'
4590 - $ref: '#/components/parameters/isLocal'
4591 - $ref: '#/components/parameters/include'
4592 - $ref: '#/components/parameters/privacyOneOf'
4593 - $ref: '#/components/parameters/hasHLSFiles'
4594 - $ref: '#/components/parameters/hasWebtorrentFiles'
4597 description: successful operation
4602 default: 'max-age=900' # 15 min cache
4606 $ref: '#/components/schemas/VideosForXML'
4607 application/rss+xml:
4609 $ref: '#/components/schemas/VideosForXML'
4612 $ref: '#/components/schemas/VideosForXML'
4613 application/atom+xml:
4615 $ref: '#/components/schemas/VideosForXML'
4620 description: accept header unsupported
4626 summary: List plugins
4627 operationId: getPlugins
4640 - $ref: '#/components/parameters/start'
4641 - $ref: '#/components/parameters/count'
4642 - $ref: '#/components/parameters/sort'
4645 description: successful operation
4649 $ref: '#/components/schemas/PluginResponse'
4655 summary: List available plugins
4656 operationId: getAvailablePlugins
4669 - name: currentPeerTubeEngine
4673 - $ref: '#/components/parameters/start'
4674 - $ref: '#/components/parameters/count'
4675 - $ref: '#/components/parameters/sort'
4678 description: successful operation
4682 $ref: '#/components/schemas/PluginResponse'
4684 description: plugin index unavailable
4690 summary: Install a plugin
4691 operationId: addPlugin
4704 example: peertube-plugin-auth-ldap
4707 additionalProperties: false
4714 additionalProperties: false
4717 description: successful operation
4719 description: should have either `npmName` or `path` set
4725 summary: Update a plugin
4726 operationId: updatePlugin
4739 example: peertube-plugin-auth-ldap
4742 additionalProperties: false
4749 additionalProperties: false
4752 description: successful operation
4754 description: should have either `npmName` or `path` set
4756 description: existing plugin not found
4762 summary: Uninstall a plugin
4763 operationId: uninstallPlugin
4775 description: name of the plugin/theme in its package.json
4776 example: peertube-plugin-auth-ldap
4781 description: successful operation
4783 description: existing plugin not found
4789 summary: Get a plugin
4790 operationId: getPlugin
4795 - $ref: '#/components/parameters/npmName'
4798 description: successful operation
4802 $ref: '#/components/schemas/Plugin'
4804 description: plugin not found
4806 /plugins/{npmName}/settings:
4810 summary: Set a plugin's settings
4815 - $ref: '#/components/parameters/npmName'
4824 additionalProperties: true
4827 description: successful operation
4829 description: plugin not found
4831 /plugins/{npmName}/public-settings:
4835 summary: Get a plugin's public settings
4837 - $ref: '#/components/parameters/npmName'
4840 description: successful operation
4845 additionalProperties: true
4847 description: plugin not found
4849 /plugins/{npmName}/registered-settings:
4853 summary: Get a plugin's registered settings
4858 - $ref: '#/components/parameters/npmName'
4861 description: successful operation
4866 additionalProperties: true
4868 description: plugin not found
4871 - url: 'https://peertube2.cpy.re/api/v1'
4872 description: Live Test Server (live data - latest nightly version)
4873 - url: 'https://peertube3.cpy.re/api/v1'
4874 description: Live Test Server (live data - latest RC version)
4875 - url: 'https://peertube.cpy.re/api/v1'
4876 description: Live Test Server (live data - stable version)
4883 description: Offset used to paginate results
4891 description: "Number of items to return"
4901 description: Sort column
4909 description: Plain text search, applied to various parts of the model depending on endpoint
4917 If the administrator enabled search index support, you can override the default search target.
4920 **Warning**: If you choose to make an index search, PeerTube will get results from a third party service.
4921 It means the instance may not yet know the objects you fetched. If you want to load video/channel information:
4922 * If the current user has the ability to make a remote URI search (this information is available in the config endpoint),
4923 then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database.
4924 After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
4925 * 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
4926 the data from the origin instance API
4949 Sort videos by criteria (prefixing with `-` means `DESC` order):
4950 * `hot` - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
4951 * `best` - Same than `hot`, but also takes into account user video history
4952 * `trending` - Sort videos by recent views ("recent" is defined by the admin)
4953 * `views` - Sort videos using their `views` counter
4954 * `publishedAt` - Sort by video publication date (when it became publicly available)
4960 Sort videos by criteria (prefixing with `-` means `DESC` order):
4975 description: Sort comments by criteria
4985 description: Sort blocklists by criteria
5001 description: Plain text search that will match with user usernames or emails
5008 description: Filter results down to (un)banned users
5015 description: Sort users by criteria
5026 description: Sort abuses by criteria
5033 videoRedundanciesSort:
5037 description: Sort abuses by criteria
5046 description: Sort followers by criteria
5055 description: The username or handle of the account
5058 example: chocobozzz | chocobozzz@example.org
5063 description: Entity id
5065 $ref: '#/components/schemas/id'
5070 description: The object id, uuid or short uuid
5073 - $ref: '#/components/schemas/id'
5074 - $ref: '#/components/schemas/UUIDv4'
5075 - $ref: '#/components/schemas/shortUUID'
5080 description: Playlist id
5082 $ref: '#/components/schemas/VideoPlaylist/properties/id'
5084 name: playlistElementId
5087 description: Playlist element id
5089 $ref: '#/components/schemas/id'
5094 description: Abuse id
5096 $ref: '#/components/schemas/Abuse/properties/id'
5098 name: abuseMessageId
5101 description: Abuse message id
5103 $ref: '#/components/schemas/AbuseMessage/properties/id'
5105 name: captionLanguage
5108 description: The caption language
5110 $ref: '#/components/schemas/VideoLanguageSet'
5115 description: The video channel handle
5118 example: my_username | my_username@example.com
5120 name: subscriptionHandle
5123 description: The subscription handle
5126 example: my_username | my_username@example.com
5131 description: The thread id (root comment id)
5138 description: The comment id
5140 $ref: '#/components/schemas/VideoComment/properties/id'
5145 description: whether or not the video is a live
5152 description: category id of the video (see [/videos/categories](#operation/getCategories))
5155 - $ref: '#/components/schemas/VideoCategorySet'
5158 $ref: '#/components/schemas/VideoCategorySet'
5165 description: tag(s) of the video
5179 description: tag(s) of the video, where all should be present in the video
5192 description: language id of the video (see [/videos/languages](#operation/getLanguages)). Use `_unknown` to filter on videos that don't have a video language
5195 - $ref: '#/components/schemas/VideoLanguageSet'
5198 $ref: '#/components/schemas/VideoLanguageSet'
5205 description: licence id of the video (see [/videos/licences](#operation/getLicences))
5208 - $ref: '#/components/schemas/VideoLicenceSet'
5211 $ref: '#/components/schemas/VideoLicenceSet'
5218 description: if you don't need the `total` in the response
5229 description: whether to include nsfw videos, if any
5241 description: '**PeerTube >= 4.0** Display only local or remote videos'
5248 description: '**PeerTube >= 4.0** Display only videos that have HLS files'
5250 name: hasWebtorrentFiles
5255 description: '**PeerTube >= 4.0** Display only videos that have WebTorrent files'
5261 $ref: '#/components/schemas/VideoPrivacySet'
5262 description: '**PeerTube >= 4.0** Display only videos in this specific privacy/privacies'
5276 **PeerTube >= 4.0** Include additional videos in results (can be combined using bitwise or operator)
5280 - `1` NOT_PUBLISHED_STATE
5291 description: list of uris to check if each is part of the user subscriptions
5301 description: name of the plugin/theme on npmjs.com or in its package.json
5304 example: peertube-plugin-auth-ldap
5309 description: job type
5313 - activitypub-follow
5314 - activitypub-http-broadcast
5315 - activitypub-http-fetcher
5316 - activitypub-http-unicast
5321 - videos-views-stats
5322 - activitypub-refresher
5347 Authenticating via OAuth requires the following steps:
5348 - Have an activated account
5349 - [Generate] an access token for that account at `/api/v1/users/token`.
5350 - Make requests with the *Authorization: Bearer <token\>* header
5351 - Profit, depending on the role assigned to the account
5353 Note that the __access token is valid for 1 day__ and is given
5354 along with a __refresh token valid for 2 weeks__.
5356 [Generate]: https://docs.joinpeertube.org/api-rest-getting-started
5360 tokenUrl: /api/v1/users/token
5363 moderator: Moderator scope
5366 # Reusable core properties
5374 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
5375 pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
5380 description: translation of a uuid v4 with a bigger alphabet to have a shorter uuid
5381 example: 2y84q2MQUMWPbiEcxNXMgC
5384 description: immutable name of the user, used to find or mention its actor
5386 pattern: '/^[a-z0-9._]+$/'
5391 description: immutable name of the channel, used to interact with its actor
5392 example: framasoft_videos
5393 pattern: '/^[a-zA-Z0-9\\-_.:]+$/'
5404 description: category id of the video (see [/videos/categories](#operation/getCategories))
5406 VideoConstantNumber-Category:
5409 $ref: '#/components/schemas/VideoCategorySet'
5412 example: Science & Technology
5416 description: licence id of the video (see [/videos/licences](#operation/getLicences))
5418 VideoConstantNumber-Licence:
5421 $ref: '#/components/schemas/VideoLicenceSet'
5424 example: Attribution - Share Alike
5428 description: language id of the video (see [/videos/languages](#operation/getLanguages))
5430 VideoConstantString-Language:
5433 $ref: '#/components/schemas/VideoLanguageSet'
5438 VideoPlaylistPrivacySet:
5444 description: Video playlist privacy policy (see [/video-playlists/privacies])
5445 VideoPlaylistPrivacyConstant:
5448 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
5452 VideoPlaylistTypeSet:
5457 description: The video playlist type (Regular = `1`, Watch Later = `2`)
5458 VideoPlaylistTypeConstant:
5461 $ref: '#/components/schemas/VideoPlaylistTypeSet'
5472 description: privacy id of the video (see [/videos/privacies](#operation/getPrivacyPolicies))
5473 VideoPrivacyConstant:
5476 $ref: '#/components/schemas/VideoPrivacySet'
5484 additionalProperties:
5485 x-additionalPropertiesName: account
5494 additionalProperties:
5495 x-additionalPropertiesName: host
5516 description: 'The user role (Admin = `0`, Moderator = `1`, User = `2`)'
5523 description: 'Admin flags for the user (None = `0`, Bypass video blocklist = `1`)'
5526 LiveVideoLatencyMode:
5532 description: 'The live latency mode (Default = `1`, High latency = `2`, Small Latency = `3`)'
5553 - `4`: Waiting for live stream
5555 - `6`: To move to an external storage (object storage...)
5556 - `7`: Transcoding failed
5557 - `8`: Moving to an external storage failed
5558 - `9`: To edit using studio edition feature
5568 description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
5572 $ref: '#/components/schemas/AbuseStateSet'
5575 AbusePredefinedReasons:
5588 example: [spamOrMisleading]
5593 Video resolution (`0`, `240`, `360`, `720`, `1080`, `1440` or `2160`)
5595 `0` is used as a special value for stillimage videos dedicated to audio, a.k.a. audio-only videos.
5597 VideoResolutionConstant:
5598 description: resolutions and their labels for the video
5601 $ref: '#/components/schemas/VideoResolutionSet'
5605 VideoScheduledUpdate:
5608 $ref: '#/components/schemas/VideoPrivacySet'
5612 description: When to update the video
5632 $ref: '#/components/schemas/ActorImage'
5633 VideoChannelSummary:
5636 $ref: '#/components/schemas/id'
5650 $ref: '#/components/schemas/ActorImage'
5664 - $ref: '#/components/schemas/Video'
5671 description: magnet URI allowing to resolve the video via BitTorrent without a metainfo file
5672 pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
5674 $ref: '#/components/schemas/VideoResolutionConstant'
5677 description: Video file size in bytes
5680 description: Direct URL of the torrent file
5684 description: URL endpoint that transfers the torrent file as an attachment (so that the browser opens a download dialog)
5688 description: Direct URL of the video
5692 description: URL endpoint that transfers the video file as an attachment (so that the browser opens a download dialog)
5696 description: Frames per second of the video file
5700 description: URL dereferencing the output of ffprobe on the file
5701 VideoStreamingPlaylists:
5706 $ref: '#/components/schemas/id'
5714 - $ref: '#/components/schemas/VideoStreamingPlaylists-HLS'
5715 VideoStreamingPlaylists-HLS:
5726 Video files associated to this playlist.
5728 The difference with the root `files` property is that these files are fragmented, so they can be used in this streaming playlist (HLS, etc.)
5730 $ref: '#/components/schemas/VideoFile'
5742 $ref: '#/components/schemas/Video/properties/id'
5744 $ref: '#/components/schemas/Video/properties/uuid'
5746 $ref: '#/components/schemas/Video/properties/name'
5750 description: object id for the video
5752 - $ref: '#/components/schemas/id'
5754 description: universal identifier for the video, that can be used across instances
5756 - $ref: '#/components/schemas/UUIDv4'
5759 - $ref: '#/components/schemas/shortUUID'
5765 example: 2017-10-01T10:52:46.396Z
5766 description: time at which the video object was first drafted
5770 example: 2018-10-01T10:52:46.396Z
5771 description: time at which the video was marked as ready for playback (with restrictions depending on `privacy`). Usually set after a `state` evolution.
5775 example: 2021-05-04T08:01:01.502Z
5776 description: last time the video's metadata was modified
5777 originallyPublishedAt:
5780 example: 2010-10-01T10:52:46.396Z
5781 description: used to represent a date of first publication, prior to the practical publication date of `publishedAt`
5784 - $ref: '#/components/schemas/VideoConstantNumber-Category'
5785 description: category in which the video is classified
5788 - $ref: '#/components/schemas/VideoConstantNumber-Licence'
5789 description: licence under which the video is distributed
5792 - $ref: '#/components/schemas/VideoConstantString-Language'
5793 description: main language used in the video
5796 - $ref: '#/components/schemas/VideoPrivacyConstant'
5797 description: privacy policy used to distribute the video
5801 **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n
5802 **Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\r\n*A decentralized video hosting network, based on fr...
5806 truncated description of the video, written in Markdown.
5807 Resolve `descriptionPath` to get the full description of maximum `10000` characters.
5812 description: duration of the video in seconds
5817 description: title of the video
5818 example: What is PeerTube?
5823 example: /static/thumbnails/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
5826 example: /lazy-static/previews/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
5829 example: /videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee
5846 - $ref: '#/components/schemas/VideoStateConstant'
5847 description: represents the internal state of the video processing within the PeerTube instance
5851 - $ref: '#/components/schemas/VideoScheduledUpdate'
5859 $ref: '#/components/schemas/AccountSummary'
5861 $ref: '#/components/schemas/VideoChannelSummary'
5870 - $ref: '#/components/schemas/Video'
5875 description: If the video is a live, you have the amount of current viewers
5878 example: /api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180a6d/description
5879 description: path at which to get the full description of maximum `10000` characters
5882 description: A text tell the audience how to support the video creator
5883 example: Please support our work on https://soutenir.framasoft.org/en/ <3
5887 $ref: '#/components/schemas/VideoChannel'
5889 $ref: '#/components/schemas/Account'
5891 example: [flowers, gardening]
5909 - https://peertube2.cpy.re/tracker/announce
5910 - wss://peertube2.cpy.re/tracker/socket
5914 $ref: '#/components/schemas/VideoFile'
5916 WebTorrent/raw video files. If WebTorrent is disabled on the server:
5918 - field will be empty
5919 - video files will be found in `streamingPlaylists[].files` field
5923 $ref: '#/components/schemas/VideoStreamingPlaylists'
5925 HLS playlists/manifest files. If HLS is disabled on the server:
5927 - field will be empty
5928 - video files will be found in `files` field
5929 FileRedundancyInformation:
5932 $ref: '#/components/schemas/id'
5957 $ref: '#/components/schemas/id'
5964 $ref: '#/components/schemas/UUIDv4'
5971 $ref: '#/components/schemas/FileRedundancyInformation'
5975 $ref: '#/components/schemas/FileRedundancyInformation'
5976 VideoImportStateConstant:
5984 description: 'The video import state (Pending = `1`, Success = `2`, Failed = `3`)'
5991 additionalProperties: false
5995 $ref: '#/components/schemas/VideoImport/properties/targetUrl'
5996 required: [targetUrl]
5999 $ref: '#/components/schemas/VideoImport/properties/magnetUri'
6000 required: [magnetUri]
6003 $ref: '#/components/schemas/VideoImport/properties/torrentfile'
6004 required: [torrentfile]
6005 - $ref: '#/components/schemas/VideoUploadRequestCommon'
6014 - $ref: '#/components/schemas/id'
6018 description: remote URL where to find the import's source video
6019 example: https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d
6023 description: magnet URI allowing to resolve the import's source video
6024 pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
6029 description: Torrent file containing only the video file
6036 - $ref: '#/components/schemas/VideoImportStateConstant'
6052 - $ref: '#/components/schemas/Video'
6062 $ref: '#/components/schemas/VideoImport'
6066 $ref: '#/components/schemas/id'
6069 example: The video is a spam
6073 $ref: '#/components/schemas/AbusePredefinedReasons'
6075 $ref: '#/components/schemas/Account'
6077 $ref: '#/components/schemas/AbuseStateConstant'
6080 example: Decided to ban the server since it spams us regularly
6084 $ref: '#/components/schemas/VideoInfo'
6091 $ref: '#/components/schemas/id'
6102 $ref: '#/components/schemas/AccountSummary'
6106 $ref: '#/components/schemas/id'
6108 $ref: '#/components/schemas/Video/properties/id'
6120 $ref: '#/components/schemas/UUIDv4'
6138 $ref: '#/components/schemas/id'
6140 $ref: '#/components/schemas/UUIDv4'
6143 - $ref: '#/components/schemas/shortUUID'
6166 $ref: '#/components/schemas/VideoPlaylistPrivacyConstant'
6168 $ref: '#/components/schemas/VideoPlaylistTypeConstant'
6170 $ref: '#/components/schemas/AccountSummary'
6172 $ref: '#/components/schemas/VideoChannelSummary'
6176 $ref: '#/components/schemas/id'
6183 description: Text of the comment
6185 example: This video is wonderful!
6187 $ref: '#/components/schemas/id'
6191 - $ref: '#/components/schemas/id'
6193 $ref: '#/components/schemas/Video/properties/id'
6208 totalRepliesFromVideoAuthor:
6215 $ref: '#/components/schemas/Account'
6216 VideoCommentThreadTree:
6219 $ref: '#/components/schemas/VideoComment'
6223 $ref: '#/components/schemas/VideoCommentThreadTree'
6227 $ref: '#/components/schemas/VideoConstantString-Language'
6249 $ref: '#/components/schemas/id'
6260 $ref: '#/components/schemas/ActorImage'
6264 $ref: '#/components/schemas/id'
6269 description: immutable name of the actor, used to find or mention it
6271 - $ref: '#/components/schemas/username'
6275 description: server on which the actor is resident
6276 hostRedundancyAllowed:
6278 description: whether this actor's host allows redundancy of its videos
6282 description: number of actors subscribed to by this actor, as seen by this instance
6286 description: number of followers of this actor, as seen by this instance
6295 - $ref: '#/components/schemas/Actor'
6298 description: object id for the user tied to this account
6300 - $ref: '#/components/schemas/User/properties/id'
6303 description: editable name of the account, displayed in its representations
6308 description: text or bio displayed on the account's profile
6316 description: timestamp within the video, in seconds
6323 Event since last viewing call:
6324 * `seek` - If the user seeked the video
6347 VideoStatsRetention:
6359 VideoStatsTimeserie:
6436 allowedForCurrentIP:
6438 requiresEmailVerification:
6456 $ref: '#/components/schemas/VideoResolutionSet'
6541 example: 16810141515
6582 description: URL of the current user page
6589 description: Stack trace of the error if there is one
6592 description: User agent of the web browser that sends the message
6595 description: Additional information regarding this log
6605 totalDailyActiveUsers:
6607 totalWeeklyActiveUsers:
6609 totalMonthlyActiveUsers:
6613 totalLocalVideoViews:
6615 description: Total video views made on the instance
6616 totalLocalVideoComments:
6618 description: Total comments made by local users
6619 totalLocalVideoFilesSize:
6625 totalLocalVideoChannels:
6627 totalLocalDailyActiveVideoChannels:
6629 totalLocalWeeklyActiveVideoChannels:
6631 totalLocalMonthlyActiveVideoChannels:
6633 totalLocalPlaylists:
6635 totalInstanceFollowers:
6637 totalInstanceFollowing:
6654 totalActivityPubMessagesProcessed:
6656 totalActivityPubMessagesSuccesses:
6658 totalActivityPubMessagesErrors:
6661 activityPubMessagesProcessedPerSecond:
6663 totalActivityPubMessagesWaiting:
6740 requiresEmailVerification:
6755 description: Settings that apply to new users, if registration is enabled
6759 example: 16810141515
6765 description: Settings pertaining to transcoding jobs
6769 allowAdditionalExtensions:
6771 description: Allow your users to upload .mkv, .mov, .avi, .wmv, .flv, .f4v, .3g2, .3gp, .mts, m2ts, .mxf, .nut videos
6774 description: If a user uploads an audio file, PeerTube will create a video by merging the preview file and the audio file
6777 description: Amount of threads used by ffmpeg for 1 transcoding job
6780 description: Amount of transcoding jobs to execute in parallel
6786 New profiles can be added by plugins ; available in core PeerTube: 'default'.
6789 description: Resolutions to transcode _new videos_ to
6811 description: WebTorrent-specific settings
6817 description: HLS-specific settings
6867 $ref: '#/components/schemas/id'
6869 $ref: '#/components/schemas/Actor'
6871 $ref: '#/components/schemas/Actor'
6874 description: score reflecting the reachability of the actor, with steps of `10` and a base score of `1000`.
6887 PredefinedAbuseReasons:
6888 description: Reason categories that help triage reports
6906 $ref: '#/components/schemas/id'
6918 - activitypub-http-unicast
6919 - activitypub-http-broadcast
6920 - activitypub-http-fetcher
6921 - activitypub-follow
6926 - videos-views-stats
6927 - activitypub-refresher
6931 additionalProperties: true
6934 additionalProperties: true
6950 $ref: '#/components/schemas/id'
6955 $ref: '#/components/schemas/id'
6956 VideoUploadRequestCommon:
6959 description: Video name
6961 example: What is PeerTube?
6965 description: Channel id that will contain this video
6970 $ref: '#/components/schemas/VideoPrivacySet'
6972 $ref: '#/components/schemas/VideoCategorySet'
6974 $ref: '#/components/schemas/VideoLicenceSet'
6976 $ref: '#/components/schemas/VideoLanguageSet'
6978 description: Video description
6981 **[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)**
6983 description: Whether or not we wait transcoding before publish the video
6986 description: A text tell the audience how to support the video creator
6987 example: Please support our work on https://soutenir.framasoft.org/en/ <3
6990 description: Whether or not this video contains sensitive content
6993 description: Video tags (maximum 5 tags each between 2 and 30 characters)
7006 description: Enable or disable comments for this video
7009 description: Enable or disable downloading for this video
7011 originallyPublishedAt:
7012 description: Date when the content was originally published
7016 $ref: '#/components/schemas/VideoScheduledUpdate'
7018 description: Video thumbnail file
7022 description: Video preview file
7028 VideoUploadRequestLegacy:
7030 - $ref: '#/components/schemas/VideoUploadRequestCommon'
7036 description: Video file
7039 VideoUploadRequestResumable:
7041 - $ref: '#/components/schemas/VideoUploadRequestCommon'
7047 description: Video filename including extension
7050 example: what_is_peertube.mp4
7052 description: Video thumbnail file
7056 description: Video preview file
7059 VideoUploadResponse:
7065 $ref: '#/components/schemas/Video/properties/id'
7067 $ref: '#/components/schemas/Video/properties/uuid'
7069 $ref: '#/components/schemas/Video/properties/shortUUID'
7070 CommentThreadResponse:
7079 $ref: '#/components/schemas/VideoComment'
7080 CommentThreadPostResponse:
7083 $ref: '#/components/schemas/VideoComment'
7093 $ref: '#/components/schemas/Video'
7097 $ref: '#/components/schemas/Account'
7100 description: Automatically start playing the upcoming video after the currently playing video
7101 autoPlayNextVideoPlaylist:
7103 description: Automatically start playing the video on the playlist after the currently playing video
7106 description: Automatically start playing the video on the watch page
7116 description: The user email
7119 description: Has the user confirmed their email address?
7122 - $ref: '#/components/schemas/id'
7126 description: Auth plugin to use to authenticate the user
7130 noInstanceConfigWarningModal:
7132 noAccountSetupWarningModal:
7137 $ref: '#/components/schemas/NSFWPolicy'
7139 $ref: '#/components/schemas/UserRole'
7148 description: Theme enabled by this user
7150 $ref: '#/components/schemas/username'
7154 $ref: '#/components/schemas/VideoChannel'
7157 description: The user video quota in bytes
7161 description: The user daily video quota in bytes
7165 description: Enable P2P in the player
7168 - $ref: '#/components/schemas/User'
7170 # optionally present fields: they require WITH_STATS scope
7173 description: Count of videos published
7176 description: Count of reports/abuses of which the user is a target
7177 abusesAcceptedCount:
7179 description: Count of reports/abuses created by the user and accepted/acted upon by the moderation team
7182 description: Count of reports/abuses created by the user
7185 description: Count of comments published
7189 $ref: '#/components/schemas/username'
7191 $ref: '#/components/schemas/password'
7195 description: The user email
7198 description: The user video quota in bytes
7202 description: The user daily video quota in bytes
7205 $ref: '#/components/schemas/usernameChannel'
7207 $ref: '#/components/schemas/UserRole'
7209 $ref: '#/components/schemas/UserAdminFlags'
7220 description: The updated email of the user
7222 - $ref: '#/components/schemas/User/properties/email'
7225 description: Set the email as verified
7228 description: The updated video quota of the user in bytes
7231 description: The updated daily video quota of the user in bytes
7235 description: The auth plugin to use to authenticate the user
7236 example: 'peertube-plugin-auth-saml2'
7238 $ref: '#/components/schemas/UserRole'
7240 $ref: '#/components/schemas/UserAdminFlags'
7242 $ref: '#/components/schemas/password'
7244 # see shared/models/users/user-update-me.model.ts:
7247 $ref: '#/components/schemas/password'
7249 $ref: '#/components/schemas/password'
7251 description: new email used for login and service communications
7253 - $ref: '#/components/schemas/User/properties/email'
7256 description: new name of the user in its representations
7261 description: new NSFW display policy
7268 description: whether to enable P2P in the player or not
7271 description: new preference regarding playing videos automatically
7274 description: new preference regarding playing following videos automatically
7275 autoPlayNextVideoPlaylist:
7277 description: new preference regarding playing following playlist videos automatically
7278 videosHistoryEnabled:
7280 description: whether to keep track of watched history or not
7285 description: list of languages to filter videos down to
7288 noInstanceConfigWarningModal:
7290 noAccountSetupWarningModal:
7297 $ref: '#/components/schemas/id'
7304 description: Rating of the video
7311 $ref: '#/components/schemas/Video'
7318 description: Rating of the video
7325 description: immutable name of the user, used to find or mention its actor
7327 - $ref: '#/components/schemas/username'
7329 $ref: '#/components/schemas/password'
7333 description: email of the user, used for login or service communications
7336 description: editable name of the user, displayed in its representations
7341 description: channel base information used to create the first channel of the user
7344 $ref: '#/components/schemas/usernameChannel'
7356 pattern: /^[a-z0-9]$/
7359 example: v1ikx5hnfop4mdpnci8nsqh93c45rldf
7362 pattern: /^[a-zA-Z0-9]$/
7365 example: AjWiOapPltI6EnsWQwlFarRtLh4u8tDt
7366 OAuthToken-password:
7368 - $ref: '#/components/schemas/OAuthClient'
7378 $ref: '#/components/schemas/User/properties/username'
7380 $ref: '#/components/schemas/password'
7387 OAuthToken-refresh_token:
7389 - $ref: '#/components/schemas/OAuthClient'
7400 example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
7409 - $ref: '#/components/schemas/Actor'
7414 description: editable name of the channel, displayed in its representations
7415 example: Videos of Framasoft
7420 example: Videos made with <3 by Framasoft
7425 description: text shown by default on all videos of this channel, to tell the audience how to support it
7426 example: Please support our work on https://soutenir.framasoft.org/en/ <3
7439 $ref: '#/components/schemas/ActorImage'
7448 $ref: '#/components/schemas/UUIDv4'
7451 - $ref: '#/components/schemas/VideoChannel'
7454 description: username of the channel to create
7456 - $ref: '#/components/schemas/usernameChannel'
7462 - $ref: '#/components/schemas/VideoChannel'
7464 bulkVideosSupportUpdate:
7466 description: Update the support field for all videos of this channel
7476 - $ref: '#/components/schemas/VideoChannel'
7477 - $ref: '#/components/schemas/Actor'
7482 name: 'media:peerLink'
7491 - application/x-bittorrent
7497 name: 'media:content'
7528 VideoCommentsForXML:
7563 description: video watch page URL
7566 description: video canonical URL
7570 description: video publication date
7573 description: video description
7576 description: video description
7579 description: publisher user name
7582 description: video category (MRSS)
7585 description: see [media:community](https://www.rssboard.org/media-rss#media-community) (MRSS)
7600 description: video embed path, relative to the canonical URL domain (MRSS)
7609 description: video watch path, relative to the canonical URL domain (MRSS)
7630 description: see [media:title](https://www.rssboard.org/media-rss#media-title) (MRSS). We only use `plain` titles.
7631 'media:description':
7638 description: see [media:rating](https://www.rssboard.org/media-rss#media-rating) (MRSS)
7641 description: main streamable file for the video
7651 - application/x-bittorrent
7660 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)
7663 - $ref: '#/components/schemas/MRSSPeerLink'
7664 - $ref: '#/components/schemas/MRSSGroupContent'
7665 NotificationSettingValue:
7682 $ref: '#/components/schemas/id'
7686 Notification type, following the `UserNotificationType` enum:
7688 - `1` NEW_VIDEO_FROM_SUBSCRIPTION
7690 - `2` NEW_COMMENT_ON_MY_VIDEO
7692 - `3` NEW_ABUSE_FOR_MODERATORS
7694 - `4` BLACKLIST_ON_MY_VIDEO
7696 - `5` UNBLACKLIST_ON_MY_VIDEO
7698 - `6` MY_VIDEO_PUBLISHED
7700 - `7` MY_VIDEO_IMPORT_SUCCESS
7702 - `8` MY_VIDEO_IMPORT_ERROR
7704 - `9` NEW_USER_REGISTRATION
7708 - `11` COMMENT_MENTION
7710 - `12` VIDEO_AUTO_BLACKLIST_FOR_MODERATORS
7712 - `13` NEW_INSTANCE_FOLLOWER
7714 - `14` AUTO_INSTANCE_FOLLOWING
7716 - `15` ABUSE_STATE_CHANGE
7718 - `16` ABUSE_NEW_MESSAGE
7720 - `17` NEW_PLUGIN_VERSION
7722 - `18` NEW_PEERTUBE_VERSION
7728 - $ref: '#/components/schemas/VideoInfo'
7732 $ref: '#/components/schemas/ActorInfo'
7738 $ref: '#/components/schemas/id'
7741 $ref: '#/components/schemas/VideoInfo'
7746 $ref: '#/components/schemas/VideoImport/properties/magnetUri'
7756 $ref: '#/components/schemas/id'
7760 $ref: '#/components/schemas/VideoInfo'
7762 $ref: '#/components/schemas/ActorInfo'
7768 $ref: '#/components/schemas/id'
7771 - $ref: '#/components/schemas/VideoInfo'
7777 $ref: '#/components/schemas/id'
7780 - $ref: '#/components/schemas/VideoInfo'
7784 - $ref: '#/components/schemas/ActorInfo'
7790 $ref: '#/components/schemas/id'
7792 $ref: '#/components/schemas/ActorInfo'
7820 NotificationListResponse:
7829 $ref: '#/components/schemas/Notification'
7834 example: peertube-plugin-auth-ldap
7862 example: https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-auth-ldap
7865 additionalProperties: true
7881 $ref: '#/components/schemas/Plugin'
7888 description: User can stream multiple times in a permanent live
7891 description: User can select live latency mode if enabled by the instance
7892 $ref: '#/components/schemas/LiveVideoLatencyMode'
7898 description: Included in the response if an appropriate token is provided
7901 description: Included in the response if an appropriate token is provided
7904 description: RTMP stream key to use to stream into this live video. Included in the response if an appropriate token is provided
7908 description: User can stream multiple times in a permanent live
7911 description: User can select live latency mode if enabled by the instance
7912 $ref: '#/components/schemas/LiveVideoLatencyMode'
7914 LiveVideoSessionResponse:
7921 description: Start date of the live session
7926 description: End date of the live session
7937 Error type if an error occurred during the live session:
7938 - `1`: Bad socket health (transcoding is too slow)
7939 - `2`: Max duration exceeded
7940 - `3`: Quota exceeded
7941 - `4`: Quota FFmpeg error
7942 - `5`: Video has been blacklisted during the live
7945 description: Video replay information
7950 $ref: '#/components/schemas/UUIDv4'
7952 $ref: '#/components/schemas/shortUUID'
7956 'https://search.example.org/api/v1/search/videos':
7958 summary: third-party search index MAY be used instead of the local index, if enabled by the instance admin. see `searchTarget`
7961 description: successful operation
7965 $ref: '#/components/schemas/VideoListResponse'