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 ressource containing a single supported video file
251 - _torrent_-based: where the metainfo file resolves to a BitTorrent ressource 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).
320 - Video Ownership Change
338 - name: Instance Configuration
342 - Instance Redundancy
352 summary: Get an account
353 operationId: getAccount
355 - $ref: '#/components/parameters/name'
358 description: successful operation
362 $ref: '#/components/schemas/Account'
364 description: account not found
366 '/accounts/{name}/videos':
371 summary: 'List videos of an account'
372 operationId: getAccountVideos
374 - $ref: '#/components/parameters/name'
375 - $ref: '#/components/parameters/categoryOneOf'
376 - $ref: '#/components/parameters/isLive'
377 - $ref: '#/components/parameters/tagsOneOf'
378 - $ref: '#/components/parameters/tagsAllOf'
379 - $ref: '#/components/parameters/licenceOneOf'
380 - $ref: '#/components/parameters/languageOneOf'
381 - $ref: '#/components/parameters/nsfw'
382 - $ref: '#/components/parameters/isLocal'
383 - $ref: '#/components/parameters/include'
384 - $ref: '#/components/parameters/privacyOneOf'
385 - $ref: '#/components/parameters/hasHLSFiles'
386 - $ref: '#/components/parameters/hasWebtorrentFiles'
387 - $ref: '#/components/parameters/skipCount'
388 - $ref: '#/components/parameters/start'
389 - $ref: '#/components/parameters/count'
390 - $ref: '#/components/parameters/videosSort'
393 description: successful operation
397 $ref: '#/components/schemas/VideoListResponse'
401 fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
402 .then(function(response) {
403 return response.json()
404 }).then(function(data) {
410 curl -s https://peertube2.cpy.re/api/v1/accounts/{name}/videos | jq
416 uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
418 http = Net::HTTP.new(uri.host, uri.port)
421 response = http.get(uri.request_uri)
423 puts JSON.parse(response.read_body)
428 r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos")
433 '/accounts/{name}/followers':
437 summary: 'List followers of an account'
440 operationId: getAccountFollowers
442 - $ref: '#/components/parameters/name'
443 - $ref: '#/components/parameters/start'
444 - $ref: '#/components/parameters/count'
445 - $ref: '#/components/parameters/followersSort'
446 - $ref: '#/components/parameters/search'
449 description: successful operation
461 $ref: '#/components/schemas/Follow'
467 summary: List accounts
468 operationId: getAccounts
470 - $ref: '#/components/parameters/start'
471 - $ref: '#/components/parameters/count'
472 - $ref: '#/components/parameters/sort'
475 description: successful operation
481 $ref: '#/components/schemas/Account'
487 summary: Get instance public configuration
488 operationId: getConfig
491 description: successful operation
495 $ref: '#/components/schemas/ServerConfig'
498 externalValue: https://peertube2.cpy.re/api/v1/config
502 summary: Get instance "About" information
503 operationId: getAbout
508 description: successful operation
512 $ref: '#/components/schemas/ServerConfigAbout'
515 externalValue: https://peertube2.cpy.re/api/v1/config/about
519 summary: Get instance runtime configuration
520 operationId: getCustomConfig
528 description: successful operation
532 $ref: '#/components/schemas/ServerConfigCustom'
534 summary: Set instance runtime configuration
535 operationId: putCustomConfig
543 description: successful operation
545 x-summary: field inconsistencies
548 - the emailer is disabled and the instance is open to registrations
549 - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled
551 summary: Delete instance runtime configuration
552 operationId: delCustomConfig
560 description: successful operation
562 /custom-pages/homepage/instance:
564 summary: Get instance custom homepage
569 description: No homepage set
571 description: successful operation
575 $ref: '#/components/schemas/CustomHomepage'
577 summary: Set instance custom homepage
591 description: content of the homepage, that will be injected in the client
594 description: successful operation
598 summary: Pause job queue
606 description: successful operation
610 summary: Resume job queue
618 description: successful operation
622 summary: List instance jobs
633 description: The state of the job ('' for for no filter)
643 - $ref: '#/components/parameters/jobType'
644 - $ref: '#/components/parameters/start'
645 - $ref: '#/components/parameters/count'
646 - $ref: '#/components/parameters/sort'
649 description: successful operation
662 $ref: '#/components/schemas/Job'
668 summary: List instances following the server
670 - $ref: '#/components/parameters/followState'
671 - $ref: '#/components/parameters/actorType'
672 - $ref: '#/components/parameters/start'
673 - $ref: '#/components/parameters/count'
674 - $ref: '#/components/parameters/sort'
677 description: successful operation
689 $ref: '#/components/schemas/Follow'
691 '/server/followers/{nameWithHost}':
693 summary: Remove or reject a follower to your server
703 description: The remote actor handle to remove from your followers
709 description: successful operation
711 description: follower not found
713 '/server/followers/{nameWithHost}/reject':
715 summary: Reject a pending follower to your server
725 description: The remote actor handle to remove from your followers
731 description: successful operation
733 description: follower not found
735 '/server/followers/{nameWithHost}/accept':
737 summary: Accept a pending follower to your server
747 description: The remote actor handle to remove from your followers
753 description: successful operation
755 description: follower not found
761 summary: List instances followed by the server
763 - $ref: '#/components/parameters/followState'
764 - $ref: '#/components/parameters/actorType'
765 - $ref: '#/components/parameters/start'
766 - $ref: '#/components/parameters/count'
767 - $ref: '#/components/parameters/sort'
770 description: successful operation
782 $ref: '#/components/schemas/Follow'
789 summary: Follow a list of actors (PeerTube instance, channel or account)
792 description: successful operation
794 description: cannot follow a non-HTTPS server
813 '/server/following/{hostOrHandle}':
815 summary: Unfollow an actor (PeerTube instance, channel or account)
825 description: The hostOrHandle to unfollow
830 description: successful operation
832 description: host or handle not found
836 summary: Create a user
845 description: user created
849 $ref: '#/components/schemas/AddUserResponse'
855 id: '$response.body#/user/id'
860 id: '$response.body#/user/id'
865 id: '$response.body#/user/id'
867 description: insufficient authority to create an admin or moderator
872 $ref: '#/components/schemas/AddUser'
874 If the smtp server is configured, you can leave the password empty and an email will be sent
875 asking the user to set it first.
879 operationId: getUsers
886 - $ref: '#/components/parameters/usersSearch'
887 - $ref: '#/components/parameters/usersBlocked'
888 - $ref: '#/components/parameters/start'
889 - $ref: '#/components/parameters/count'
890 - $ref: '#/components/parameters/usersSort'
893 description: successful operation
899 $ref: '#/components/schemas/User'
903 - $ref: '#/components/parameters/id'
905 summary: Delete a user
914 description: successful operation
925 description: include statistics about the user (only available as a moderator/admin)
930 x-summary: successful operation
932 As an admin/moderator, you can request a response augmented with statistics about the user's
933 moderation relations and videos usage, by using the `withStats` parameter.
938 - $ref: '#/components/schemas/User'
939 - $ref: '#/components/schemas/UserWithStats'
941 summary: Update a user
949 description: successful operation
954 $ref: '#/components/schemas/UpdateUser'
957 /oauth-clients/local:
959 summary: Login prerequisite
960 description: You need to retrieve a client id and secret before [logging in](#operation/getOAuthToken).
961 operationId: getOAuthClient
966 description: successful operation
970 $ref: '#/components/schemas/OAuthClient'
972 UseOAuthClientToLogin:
973 operationId: getOAuthToken
975 client_id: '$response.body#/client_id'
976 client_secret: '$response.body#/client_secret'
980 API="https://peertube2.cpy.re/api/v1"
983 curl -s "$API/oauth-clients/local"
988 operationId: getOAuthToken
989 description: With your [client id and secret](#operation/getOAuthClient), you can retrieve an access and refresh tokens.
994 application/x-www-form-urlencoded:
997 - $ref: '#/components/schemas/OAuthToken-password'
998 - $ref: '#/components/schemas/OAuthToken-refresh_token'
1000 propertyName: grant_type
1002 password: '#/components/schemas/OAuthToken-password'
1003 refresh_token: '#/components/schemas/OAuthToken-refresh_token'
1006 description: successful operation
1017 example: 90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0
1018 description: valid for 1 day
1021 example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
1022 description: valid for 2 weeks
1027 refresh_token_expires_in:
1032 x-summary: client or credentials are invalid
1034 Disambiguate via `type`:
1035 - `invalid_client` for an unmatched `client_id`
1036 - `invalid_grant` for unmatched credentials
1038 x-summary: token expired
1040 Disambiguate via `type`:
1041 - default value for a regular authentication failure
1042 - `invalid_token` for an expired token
1047 API="https://peertube2.cpy.re/api/v1"
1048 USERNAME="<your_username>"
1049 PASSWORD="<your_password>"
1052 client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
1053 client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
1054 curl -s "$API/users/token" \
1055 --data client_id="$client_id" \
1056 --data client_secret="$client_secret" \
1057 --data grant_type=password \
1058 --data username="$USERNAME" \
1059 --data password="$PASSWORD" \
1060 | jq -r ".access_token"
1062 /users/revoke-token:
1065 description: Revokes your access token and its associated refresh token, destroying your current session.
1066 operationId: revokeOAuthToken
1073 description: successful operation
1077 summary: Register a user
1078 operationId: registerUser
1084 description: successful operation
1089 $ref: '#/components/schemas/RegisterUser'
1092 /users/{id}/verify-email:
1094 summary: Verify a user
1095 operationId: verifyUser
1097 Following a user registration, the new user will receive an email asking to click a link
1098 containing a secret.
1103 - $ref: '#/components/parameters/id'
1116 - verificationString
1119 description: successful operation
1121 description: invalid verification string
1123 description: user not found
1125 /users/ask-send-verify-email:
1127 summary: Resend user verification link
1128 operationId: resendEmailToVerifyUser
1134 description: successful operation
1138 summary: Get my user information
1139 operationId: getUserInfo
1147 description: successful operation
1153 $ref: '#/components/schemas/User'
1155 summary: Update my user information
1156 operationId: putUserInfo
1164 description: successful operation
1169 $ref: '#/components/schemas/UpdateMe'
1172 /users/me/videos/imports:
1174 summary: Get video imports of my user
1182 - $ref: '#/components/parameters/start'
1183 - $ref: '#/components/parameters/count'
1184 - $ref: '#/components/parameters/sort'
1187 description: successful operation
1191 $ref: '#/components/schemas/VideoImportsList'
1193 /users/me/video-quota-used:
1195 summary: Get my user used quota
1203 description: successful operation
1211 description: The user video quota used so far in bytes
1212 example: 16810141515
1213 videoQuotaUsedDaily:
1215 description: The user video quota used today in bytes
1218 '/users/me/videos/{videoId}/rating':
1220 summary: Get rate of my user for a video
1230 description: The video id
1232 $ref: '#/components/schemas/Video/properties/id'
1235 description: successful operation
1239 $ref: '#/components/schemas/GetMeVideoRating'
1243 summary: Get videos of my user
1251 - $ref: '#/components/parameters/start'
1252 - $ref: '#/components/parameters/count'
1253 - $ref: '#/components/parameters/sort'
1256 description: successful operation
1260 $ref: '#/components/schemas/VideoListResponse'
1262 /users/me/subscriptions:
1264 summary: Get my user subscriptions
1271 - $ref: '#/components/parameters/start'
1272 - $ref: '#/components/parameters/count'
1273 - $ref: '#/components/parameters/sort'
1276 description: successful operation
1280 $ref: '#/components/schemas/VideoChannelList'
1284 summary: Add subscription to my user
1297 description: uri of the video channels to subscribe to
1303 uri: 008a0e54-375d-49d0-8379-143202e24152@video.lqdn.fr
1306 description: successful operation
1308 /users/me/subscriptions/exist:
1310 summary: Get if subscriptions exist for my user
1317 - $ref: '#/components/parameters/subscriptionsUris'
1320 description: successful operation
1326 /users/me/subscriptions/videos:
1328 summary: List videos of subscriptions of my user
1336 - $ref: '#/components/parameters/categoryOneOf'
1337 - $ref: '#/components/parameters/isLive'
1338 - $ref: '#/components/parameters/tagsOneOf'
1339 - $ref: '#/components/parameters/tagsAllOf'
1340 - $ref: '#/components/parameters/licenceOneOf'
1341 - $ref: '#/components/parameters/languageOneOf'
1342 - $ref: '#/components/parameters/nsfw'
1343 - $ref: '#/components/parameters/isLocal'
1344 - $ref: '#/components/parameters/include'
1345 - $ref: '#/components/parameters/privacyOneOf'
1346 - $ref: '#/components/parameters/hasHLSFiles'
1347 - $ref: '#/components/parameters/hasWebtorrentFiles'
1348 - $ref: '#/components/parameters/skipCount'
1349 - $ref: '#/components/parameters/start'
1350 - $ref: '#/components/parameters/count'
1351 - $ref: '#/components/parameters/videosSort'
1354 description: successful operation
1358 $ref: '#/components/schemas/VideoListResponse'
1360 '/users/me/subscriptions/{subscriptionHandle}':
1362 summary: Get subscription of my user
1369 - $ref: '#/components/parameters/subscriptionHandle'
1372 description: successful operation
1376 $ref: '#/components/schemas/VideoChannel'
1378 summary: Delete subscription of my user
1385 - $ref: '#/components/parameters/subscriptionHandle'
1388 description: successful operation
1390 /users/me/notifications:
1392 summary: List my notifications
1400 description: only list unread notifications
1403 - $ref: '#/components/parameters/start'
1404 - $ref: '#/components/parameters/count'
1405 - $ref: '#/components/parameters/sort'
1408 description: successful operation
1412 $ref: '#/components/schemas/NotificationListResponse'
1414 /users/me/notifications/read:
1416 summary: Mark notifications as read by their id
1429 description: ids of the notifications to mark as read
1436 description: successful operation
1438 /users/me/notifications/read-all:
1440 summary: Mark all my notification as read
1447 description: successful operation
1449 /users/me/notification-settings:
1451 summary: Update my notification settings
1462 newVideoFromSubscription:
1463 $ref: '#/components/schemas/NotificationSettingValue'
1464 newCommentOnMyVideo:
1465 $ref: '#/components/schemas/NotificationSettingValue'
1467 $ref: '#/components/schemas/NotificationSettingValue'
1468 videoAutoBlacklistAsModerator:
1469 $ref: '#/components/schemas/NotificationSettingValue'
1471 $ref: '#/components/schemas/NotificationSettingValue'
1473 $ref: '#/components/schemas/NotificationSettingValue'
1474 myVideoImportFinished:
1475 $ref: '#/components/schemas/NotificationSettingValue'
1477 $ref: '#/components/schemas/NotificationSettingValue'
1478 newUserRegistration:
1479 $ref: '#/components/schemas/NotificationSettingValue'
1481 $ref: '#/components/schemas/NotificationSettingValue'
1482 newInstanceFollower:
1483 $ref: '#/components/schemas/NotificationSettingValue'
1484 autoInstanceFollowing:
1485 $ref: '#/components/schemas/NotificationSettingValue'
1488 description: successful operation
1490 /users/me/history/videos:
1492 summary: List watched videos history
1498 - $ref: '#/components/parameters/start'
1499 - $ref: '#/components/parameters/count'
1500 - $ref: '#/components/parameters/search'
1503 description: successful operation
1507 $ref: '#/components/schemas/VideoListResponse'
1509 /users/me/history/videos/{videoId}:
1511 summary: Delete history element
1521 $ref: '#/components/schemas/Video/properties/id'
1524 description: successful operation
1526 /users/me/history/videos/remove:
1528 summary: Clear video history
1535 multipart/form-data:
1540 description: history before this date will be deleted
1545 description: successful operation
1547 /users/me/avatar/pick:
1549 summary: Update my user avatar
1556 description: successful operation
1565 $ref: '#/components/schemas/ActorImage'
1567 description: image file too large
1569 X-File-Maximum-Size:
1573 description: Maximum file size for the avatar
1576 multipart/form-data:
1581 description: The file to upload
1586 contentType: image/png, image/jpeg
1590 summary: Delete my avatar
1597 description: successful operation
1601 summary: List video ownership changes
1603 - Video Ownership Change
1608 description: successful operation
1610 '/videos/ownership/{id}/accept':
1612 summary: Accept ownership change request
1614 - Video Ownership Change
1618 - $ref: '#/components/parameters/idOrUUID'
1621 description: successful operation
1623 description: cannot terminate an ownership change of another user
1625 description: video ownership change not found
1627 '/videos/ownership/{id}/refuse':
1629 summary: Refuse ownership change request
1631 - Video Ownership Change
1635 - $ref: '#/components/parameters/idOrUUID'
1638 description: successful operation
1640 description: cannot terminate an ownership change of another user
1642 description: video ownership change not found
1644 '/videos/{id}/give-ownership':
1646 summary: Request ownership change
1648 - Video Ownership Change
1652 - $ref: '#/components/parameters/idOrUUID'
1656 application/x-www-form-urlencoded:
1666 description: successful operation
1668 description: changing video ownership to a remote account is not supported yet
1670 description: video not found
1674 summary: List videos
1675 operationId: getVideos
1679 - $ref: '#/components/parameters/categoryOneOf'
1680 - $ref: '#/components/parameters/isLive'
1681 - $ref: '#/components/parameters/tagsOneOf'
1682 - $ref: '#/components/parameters/tagsAllOf'
1683 - $ref: '#/components/parameters/licenceOneOf'
1684 - $ref: '#/components/parameters/languageOneOf'
1685 - $ref: '#/components/parameters/nsfw'
1686 - $ref: '#/components/parameters/isLocal'
1687 - $ref: '#/components/parameters/include'
1688 - $ref: '#/components/parameters/privacyOneOf'
1689 - $ref: '#/components/parameters/hasHLSFiles'
1690 - $ref: '#/components/parameters/hasWebtorrentFiles'
1691 - $ref: '#/components/parameters/skipCount'
1692 - $ref: '#/components/parameters/start'
1693 - $ref: '#/components/parameters/count'
1694 - $ref: '#/components/parameters/videosSort'
1697 description: successful operation
1701 $ref: '#/components/schemas/VideoListResponse'
1705 summary: List available video categories
1706 operationId: getCategories
1711 description: successful operation
1720 externalValue: https://peertube2.cpy.re/api/v1/videos/categories
1724 summary: List available video licences
1725 operationId: getLicences
1730 description: successful operation
1739 externalValue: https://peertube2.cpy.re/api/v1/videos/licences
1743 summary: List available video languages
1744 operationId: getLanguages
1749 description: successful operation
1758 externalValue: https://peertube2.cpy.re/api/v1/videos/languages
1762 summary: List available video privacy policies
1763 operationId: getPrivacyPolicies
1768 description: successful operation
1777 externalValue: https://peertube2.cpy.re/api/v1/videos/privacies
1781 summary: Update a video
1782 operationId: putVideo
1788 - $ref: '#/components/parameters/idOrUUID'
1791 description: successful operation
1794 multipart/form-data:
1799 description: Video thumbnail file
1803 description: Video preview file
1807 $ref: '#/components/schemas/VideoCategorySet'
1809 $ref: '#/components/schemas/VideoLicenceSet'
1811 $ref: '#/components/schemas/VideoLanguageSet'
1813 $ref: '#/components/schemas/VideoPrivacySet'
1815 description: Video description
1818 description: Whether or not we wait transcoding before publish the video
1821 description: A text tell the audience how to support the video creator
1822 example: Please support our work on https://soutenir.framasoft.org/en/ <3
1825 description: Whether or not this video contains sensitive content
1828 description: Video name
1833 description: Video tags (maximum 5 tags each between 2 and 30 characters)
1842 description: Enable or disable comments for this video
1845 description: Enable or disable downloading for this video
1847 originallyPublishedAt:
1848 description: Date when the content was originally published
1852 $ref: '#/components/schemas/VideoScheduledUpdate'
1855 contentType: image/jpeg
1857 contentType: image/jpeg
1859 summary: Get a video
1860 operationId: getVideo
1864 - $ref: '#/components/parameters/idOrUUID'
1867 description: successful operation
1871 $ref: '#/components/schemas/VideoDetails'
1873 summary: Delete a video
1874 operationId: delVideo
1880 - $ref: '#/components/parameters/idOrUUID'
1883 description: successful operation
1885 '/videos/{id}/description':
1887 summary: Get complete video description
1888 operationId: getVideoDesc
1892 - $ref: '#/components/parameters/idOrUUID'
1895 description: successful operation
1904 **[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)**
1906 '/videos/{id}/views':
1908 summary: Notify user is watching a video
1909 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.
1910 operationId: addView
1914 - $ref: '#/components/parameters/idOrUUID'
1919 $ref: '#/components/schemas/UserViewingVideo'
1923 description: successful operation
1925 '/videos/{id}/watching':
1927 summary: Set watching progress of a video
1929 description: This endpoint has been deprecated. Use `/videos/{id}/views` instead
1935 - $ref: '#/components/parameters/idOrUUID'
1940 $ref: '#/components/schemas/UserViewingVideo'
1944 description: successful operation
1946 '/videos/{id}/stats/overall':
1948 summary: Get overall stats of a video
1954 - $ref: '#/components/parameters/idOrUUID'
1957 description: successful operation
1961 $ref: '#/components/schemas/VideoStatsOverall'
1963 '/videos/{id}/stats/retention':
1965 summary: Get retention stats of a video
1971 - $ref: '#/components/parameters/idOrUUID'
1974 description: successful operation
1978 $ref: '#/components/schemas/VideoStatsRetention'
1980 '/videos/{id}/stats/timeseries/{metric}':
1982 summary: Get timeserie stats of a video
1988 - $ref: '#/components/parameters/idOrUUID'
1993 description: The metric to get
1998 - 'aggregateWatchTime'
2001 description: successful operation
2005 $ref: '#/components/schemas/VideoStatsTimeserie'
2009 summary: Upload a video
2010 description: Uses a single request to upload a video.
2011 operationId: uploadLegacy
2019 description: successful operation
2023 $ref: '#/components/schemas/VideoUploadResponse'
2025 description: video didn't pass upload filter
2027 description: upload has timed out
2029 x-summary: video file too large, due to quota or max body size limit set by the reverse-proxy
2031 If the response has no body, it means the reverse-proxy didn't let it through. Otherwise disambiguate via `type`:
2032 - `quota_reached` for quota limits wether daily or global
2034 X-File-Maximum-Size:
2038 description: Maximum file size for the video
2040 description: video type unsupported
2042 description: video unreadable
2045 multipart/form-data:
2047 $ref: '#/components/schemas/VideoUploadRequestLegacy'
2050 contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream
2052 contentType: image/jpeg
2054 contentType: image/jpeg
2059 USERNAME="<your_username>"
2060 PASSWORD="<your_password>"
2061 FILE_PATH="<your_file_path>"
2062 CHANNEL_ID="<your_channel_id>"
2064 API="https://peertube2.cpy.re/api/v1"
2067 client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
2068 client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
2069 token=$(curl -s "$API/users/token" \
2070 --data client_id="$client_id" \
2071 --data client_secret="$client_secret" \
2072 --data grant_type=password \
2073 --data username="$USERNAME" \
2074 --data password="$PASSWORD" \
2075 | jq -r ".access_token")
2078 curl -s "$API/videos/upload" \
2079 -H "Authorization: Bearer $token" \
2081 --form videofile=@"$FILE_PATH" \
2082 --form channelId=$CHANNEL_ID \
2085 /videos/upload-resumable:
2087 summary: Initialize the resumable upload of a video
2088 description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to initialize the upload of a video
2089 operationId: uploadResumableInit
2096 - name: X-Upload-Content-Length
2102 description: Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.
2103 - name: X-Upload-Content-Type
2110 description: MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.
2115 $ref: '#/components/schemas/VideoUploadRequestResumable'
2118 description: file already exists, send a [`resume`](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) request instead
2120 description: created
2126 example: /api/v1/videos/upload-resumable?upload_id=471e97554f21dec3b8bb5d4602939c51
2132 x-summary: video file too large, due to quota, absolute max file size or concurrent partial upload limit
2134 Disambiguate via `type`:
2135 - `max_file_size_reached` for the absolute file size limit
2136 - `quota_reached` for quota limits whether daily or global
2138 description: video type unsupported
2140 summary: Send chunk for the resumable upload of a video
2141 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
2142 operationId: uploadResumable
2153 Created session id to proceed with. If you didn't send chunks in the last hour, it is
2154 not valid anymore and you need to initialize a new upload.
2157 - name: Content-Range
2161 example: bytes 0-262143/2469036
2164 Specifies the bytes in the file that the request is uploading.
2166 For example, a value of `bytes 0-262143/1000000` shows that the request is sending the first
2167 262144 bytes (256 x 1024) in a 2,469,036 byte file.
2168 - name: Content-Length
2175 Size of the chunk that the request is sending.
2177 Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from
2178 1048576 bytes (~1MB) and increases or reduces size depending on connection health.
2181 application/octet-stream:
2187 description: last chunk received
2195 $ref: '#/components/schemas/VideoUploadResponse'
2197 description: resume incomplete
2202 example: bytes=0-262143
2208 description: video didn't pass upload filter
2210 description: upload not found
2212 description: chunk doesn't match range
2214 description: video unreadable
2216 description: too many concurrent requests
2218 description: upload is already being processed
2225 summary: Cancel the resumable upload of a video, deleting any data uploaded so far
2226 description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to cancel the upload of a video
2227 operationId: uploadResumableCancel
2238 Created session id to proceed with. If you didn't send chunks in the last 12 hours, it is
2239 not valid anymore and the upload session has already been deleted with its data ;-)
2242 - name: Content-Length
2250 description: upload cancelled
2257 description: upload not found
2261 summary: Import a video
2262 description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
2263 operationId: importVideo
2271 multipart/form-data:
2273 $ref: '#/components/schemas/VideoCreateImport'
2276 contentType: application/x-bittorrent
2278 contentType: image/jpeg
2280 contentType: image/jpeg
2283 description: successful operation
2287 $ref: '#/components/schemas/VideoUploadResponse'
2289 description: '`magnetUri` or `targetUrl` or a torrent file missing'
2291 description: video didn't pass pre-import filter
2293 description: HTTP or Torrent/magnetURI import not enabled
2295 /videos/imports/{id}/cancel:
2297 summary: Cancel video import
2298 description: Cancel a pending video import
2304 - $ref: '#/components/parameters/id'
2307 description: successful operation
2309 /videos/imports/{id}:
2311 summary: Delete video import
2312 description: Delete ended video import
2318 - $ref: '#/components/parameters/id'
2321 description: successful operation
2325 summary: Create a live
2326 operationId: addLive
2334 description: successful operation
2338 $ref: '#/components/schemas/VideoUploadResponse'
2340 x-summary: validation error, or conflicting `saveReplay` and `permanentLive` parameter set
2342 Disambiguate via `type`:
2343 - default type for a validation error
2344 - `live_conflicting_permanent_and_save_replay` for conflicting parameters set
2346 x-summary: live is not enabled, allow replay is not enabled, or max instance/user live videos limit is exceeded
2348 Disambiguate via `type`:
2349 - `live_not_enabled` for a disabled live feature
2350 - `live_not_allowing_replay` for a disabled replay feature
2351 - `max_instance_lives_limit_reached` for the absolute concurrent live limit
2352 - `max_user_lives_limit_reached` for the user concurrent live limit
2355 multipart/form-data:
2360 description: Channel id that will contain this live video
2365 description: User can stream multiple times in a permanent live
2368 description: User can select live latency mode if enabled by the instance
2369 $ref: '#/components/schemas/LiveVideoLatencyMode'
2371 description: Live video/replay thumbnail file
2375 description: Live video/replay preview file
2379 $ref: '#/components/schemas/VideoPrivacySet'
2381 $ref: '#/components/schemas/VideoCategorySet'
2383 $ref: '#/components/schemas/VideoLicenceSet'
2385 $ref: '#/components/schemas/VideoLanguageSet'
2387 description: Live video/replay description
2390 description: A text tell the audience how to support the creator
2391 example: Please support our work on https://soutenir.framasoft.org/en/ <3
2394 description: Whether or not this live video/replay contains sensitive content
2397 description: Live video/replay name
2402 description: Live video/replay tags (maximum 5 tags each between 2 and 30 characters)
2411 description: Enable or disable comments for this live video/replay
2414 description: Enable or disable downloading for the replay of this live video
2421 contentType: image/jpeg
2423 contentType: image/jpeg
2427 summary: Get information about a live
2428 operationId: getLiveId
2435 - $ref: '#/components/parameters/idOrUUID'
2438 description: successful operation
2442 $ref: '#/components/schemas/LiveVideoResponse'
2444 summary: Update information about a live
2445 operationId: updateLiveId
2452 - $ref: '#/components/parameters/idOrUUID'
2457 $ref: '#/components/schemas/LiveVideoUpdate'
2460 description: successful operation
2462 description: bad parameters or trying to update a live that has already started
2464 description: trying to save replay of the live but saving replay is not enabled on the instance
2468 summary: List my abuses
2469 operationId: getMyAbuses
2478 description: only list the report with this id
2484 $ref: '#/components/schemas/AbuseStateSet'
2485 - $ref: '#/components/parameters/abusesSort'
2486 - $ref: '#/components/parameters/start'
2487 - $ref: '#/components/parameters/count'
2490 description: successful operation
2502 $ref: '#/components/schemas/Abuse'
2506 summary: List abuses
2507 operationId: getAbuses
2517 description: only list the report with this id
2520 - name: predefinedReason
2522 description: predefined reason the listed reports should contain
2524 $ref: '#/components/schemas/PredefinedAbuseReasons'
2527 description: plain search that will match with video titles, reporter names and more
2533 $ref: '#/components/schemas/AbuseStateSet'
2534 - name: searchReporter
2536 description: only list reports of a specific reporter
2539 - name: searchReportee
2540 description: only list reports of a specific reportee
2546 description: only list reports of a specific video
2549 - name: searchVideoChannel
2551 description: only list reports of a specific video channel
2556 description: only list deleted or blocklisted videos
2564 description: only list account, comment or video reports
2571 - $ref: '#/components/parameters/start'
2572 - $ref: '#/components/parameters/count'
2573 - $ref: '#/components/parameters/abusesSort'
2576 description: successful operation
2588 $ref: '#/components/schemas/Abuse'
2590 summary: Report an abuse
2603 description: Reason why the user reports this video
2608 $ref: '#/components/schemas/PredefinedAbuseReasons'
2613 description: Video id to report
2615 - $ref: '#/components/schemas/Video/properties/id'
2619 description: Timestamp in the video that marks the beginning of the report
2624 description: Timestamp in the video that marks the ending of the report
2630 description: Comment id to report
2632 - $ref: '#/components/schemas/VideoComment/properties/id'
2637 description: Account id to report
2643 description: successful operation
2653 $ref: '#/components/schemas/id'
2655 description: incorrect request parameters
2657 '/abuses/{abuseId}':
2659 summary: Update an abuse
2667 - $ref: '#/components/parameters/abuseId'
2675 $ref: '#/components/schemas/AbuseStateSet'
2678 description: Update the report comment visible only to the moderation team
2683 description: successful operation
2685 description: abuse not found
2689 summary: Delete an abuse
2695 - $ref: '#/components/parameters/abuseId'
2698 description: successful operation
2700 description: block not found
2702 '/abuses/{abuseId}/messages':
2704 summary: List messages of an abuse
2710 - $ref: '#/components/parameters/abuseId'
2713 description: successful operation
2725 $ref: '#/components/schemas/AbuseMessage'
2727 summary: Add message to an abuse
2733 - $ref: '#/components/parameters/abuseId'
2742 description: Message to send
2750 description: successful operation
2752 description: incorrect request parameters
2754 '/abuses/{abuseId}/messages/{abuseMessageId}':
2756 summary: Delete an abuse message
2762 - $ref: '#/components/parameters/abuseId'
2763 - $ref: '#/components/parameters/abuseMessageId'
2766 description: successful operation
2768 '/videos/{id}/blacklist':
2770 summary: Block a video
2771 operationId: addVideoBlock
2779 - $ref: '#/components/parameters/idOrUUID'
2782 description: successful operation
2784 summary: Unblock a video by its id
2785 operationId: delVideoBlock
2793 - $ref: '#/components/parameters/idOrUUID'
2796 description: successful operation
2798 description: block not found
2804 summary: List video blocks
2805 operationId: getVideoBlocks
2814 list only blocks that match this type:
2818 - `2`: automatic block that needs review
2826 description: plain search that will match with video titles, and more
2829 - $ref: '#/components/parameters/start'
2830 - $ref: '#/components/parameters/count'
2831 - $ref: '#/components/parameters/blacklistsSort'
2834 description: successful operation
2846 $ref: '#/components/schemas/VideoBlacklist'
2848 /videos/{id}/captions:
2850 summary: List captions of a video
2851 operationId: getVideoCaptions
2855 - $ref: '#/components/parameters/idOrUUID'
2858 description: successful operation
2870 $ref: '#/components/schemas/VideoCaption'
2872 /videos/{id}/captions/{captionLanguage}:
2874 summary: Add or replace a video caption
2875 operationId: addVideoCaption
2882 - $ref: '#/components/parameters/idOrUUID'
2883 - $ref: '#/components/parameters/captionLanguage'
2886 multipart/form-data:
2891 description: The file to upload.
2896 contentType: text/vtt, application/x-subrip, text/plain
2899 description: successful operation
2901 description: video or language not found
2903 summary: Delete a video caption
2904 operationId: delVideoCaption
2911 - $ref: '#/components/parameters/idOrUUID'
2912 - $ref: '#/components/parameters/captionLanguage'
2915 description: successful operation
2917 description: video or language or caption for that language not found
2921 summary: List video channels
2922 operationId: getVideoChannels
2926 - $ref: '#/components/parameters/start'
2927 - $ref: '#/components/parameters/count'
2928 - $ref: '#/components/parameters/sort'
2931 description: successful operation
2935 $ref: '#/components/schemas/VideoChannelList'
2937 summary: Create a video channel
2938 operationId: addVideoChannel
2945 description: successful operation
2955 $ref: '#/components/schemas/id'
2960 $ref: '#/components/schemas/VideoChannelCreate'
2962 '/video-channels/{channelHandle}':
2964 summary: Get a video channel
2965 operationId: getVideoChannel
2969 - $ref: '#/components/parameters/channelHandle'
2972 description: successful operation
2976 $ref: '#/components/schemas/VideoChannel'
2978 summary: Update a video channel
2979 operationId: putVideoChannel
2985 - $ref: '#/components/parameters/channelHandle'
2988 description: successful operation
2993 $ref: '#/components/schemas/VideoChannelUpdate'
2995 summary: Delete a video channel
2996 operationId: delVideoChannel
3002 - $ref: '#/components/parameters/channelHandle'
3005 description: successful operation
3007 '/video-channels/{channelHandle}/videos':
3009 summary: List videos of a video channel
3010 operationId: getVideoChannelVideos
3015 - $ref: '#/components/parameters/channelHandle'
3016 - $ref: '#/components/parameters/categoryOneOf'
3017 - $ref: '#/components/parameters/isLive'
3018 - $ref: '#/components/parameters/tagsOneOf'
3019 - $ref: '#/components/parameters/tagsAllOf'
3020 - $ref: '#/components/parameters/licenceOneOf'
3021 - $ref: '#/components/parameters/languageOneOf'
3022 - $ref: '#/components/parameters/nsfw'
3023 - $ref: '#/components/parameters/isLocal'
3024 - $ref: '#/components/parameters/include'
3025 - $ref: '#/components/parameters/privacyOneOf'
3026 - $ref: '#/components/parameters/hasHLSFiles'
3027 - $ref: '#/components/parameters/hasWebtorrentFiles'
3028 - $ref: '#/components/parameters/skipCount'
3029 - $ref: '#/components/parameters/start'
3030 - $ref: '#/components/parameters/count'
3031 - $ref: '#/components/parameters/videosSort'
3034 description: successful operation
3038 $ref: '#/components/schemas/VideoListResponse'
3040 '/video-channels/{channelHandle}/followers':
3044 summary: 'List followers of a video channel'
3047 operationId: getVideoChannelFollowers
3049 - $ref: '#/components/parameters/channelHandle'
3050 - $ref: '#/components/parameters/start'
3051 - $ref: '#/components/parameters/count'
3052 - $ref: '#/components/parameters/followersSort'
3053 - $ref: '#/components/parameters/search'
3056 description: successful operation
3068 $ref: '#/components/schemas/Follow'
3070 '/video-channels/{channelHandle}/avatar/pick':
3072 summary: Update channel avatar
3078 - $ref: '#/components/parameters/channelHandle'
3081 description: successful operation
3090 $ref: '#/components/schemas/ActorImage'
3092 description: image file too large
3094 X-File-Maximum-Size:
3098 description: Maximum file size for the avatar
3101 multipart/form-data:
3106 description: The file to upload.
3111 contentType: image/png, image/jpeg
3113 '/video-channels/{channelHandle}/avatar':
3115 summary: Delete channel avatar
3121 - $ref: '#/components/parameters/channelHandle'
3124 description: successful operation
3126 '/video-channels/{channelHandle}/banner/pick':
3128 summary: Update channel banner
3134 - $ref: '#/components/parameters/channelHandle'
3137 description: successful operation
3146 $ref: '#/components/schemas/ActorImage'
3148 description: image file too large
3150 X-File-Maximum-Size:
3154 description: Maximum file size for the banner
3157 multipart/form-data:
3162 description: The file to upload.
3167 contentType: image/png, image/jpeg
3169 '/video-channels/{channelHandle}/banner':
3171 summary: Delete channel banner
3177 - $ref: '#/components/parameters/channelHandle'
3180 description: successful operation
3182 /video-playlists/privacies:
3184 summary: List available playlist privacy policies
3185 operationId: getPlaylistPrivacyPolicies
3190 description: successful operation
3199 externalValue: https://peertube2.cpy.re/api/v1/video-playlists/privacies
3203 summary: List video playlists
3204 operationId: getPlaylists
3208 - $ref: '#/components/parameters/start'
3209 - $ref: '#/components/parameters/count'
3210 - $ref: '#/components/parameters/sort'
3213 description: successful operation
3225 $ref: '#/components/schemas/VideoPlaylist'
3227 summary: Create a video playlist
3228 description: If the video playlist is set as public, `videoChannelId` is mandatory.
3229 operationId: addPlaylist
3236 description: successful operation
3246 $ref: '#/components/schemas/VideoPlaylist/properties/id'
3248 $ref: '#/components/schemas/VideoPlaylist/properties/uuid'
3250 $ref: '#/components/schemas/VideoPlaylist/properties/shortUUID'
3253 multipart/form-data:
3258 description: Video playlist display name
3263 description: Video playlist thumbnail file
3267 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
3269 description: Video playlist description
3275 - $ref: '#/components/schemas/id'
3276 description: Video channel in which the playlist will be published
3281 contentType: image/jpeg
3283 /video-playlists/{playlistId}:
3285 summary: Get a video playlist
3289 - $ref: '#/components/parameters/playlistId'
3292 description: successful operation
3296 $ref: '#/components/schemas/VideoPlaylist'
3298 summary: Update a video playlist
3299 description: 'If the video playlist is set as public, the playlist must have a assigned channel.'
3306 description: successful operation
3308 - $ref: '#/components/parameters/playlistId'
3311 multipart/form-data:
3316 description: Video playlist display name
3321 description: Video playlist thumbnail file
3325 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
3327 description: Video playlist description
3331 - $ref: '#/components/schemas/id'
3332 description: Video channel in which the playlist will be published
3335 contentType: image/jpeg
3337 summary: Delete a video playlist
3343 - $ref: '#/components/parameters/playlistId'
3346 description: successful operation
3348 /video-playlists/{playlistId}/videos:
3350 summary: 'List videos of a playlist'
3351 operationId: getVideoPlaylistVideos
3356 - $ref: '#/components/parameters/playlistId'
3357 - $ref: '#/components/parameters/start'
3358 - $ref: '#/components/parameters/count'
3361 description: successful operation
3365 $ref: '#/components/schemas/VideoListResponse'
3367 summary: Add a video in a playlist
3368 operationId: addVideoPlaylistVideo
3375 - $ref: '#/components/parameters/playlistId'
3378 description: successful operation
3384 videoPlaylistElement:
3398 - $ref: '#/components/schemas/Video/properties/uuid'
3399 - $ref: '#/components/schemas/Video/properties/id'
3400 description: Video to add in the playlist
3404 description: Start the video at this specific timestamp
3408 description: Stop the video at this specific timestamp
3412 /video-playlists/{playlistId}/videos/reorder:
3414 summary: 'Reorder a playlist'
3415 operationId: reorderVideoPlaylist
3421 - $ref: '#/components/parameters/playlistId'
3424 description: successful operation
3433 description: 'Start position of the element to reorder'
3435 insertAfterPosition:
3437 description: 'New position for the block to reorder, to add the block before the first element'
3441 description: 'How many element from `startPosition` to reorder'
3445 - insertAfterPosition
3447 /video-playlists/{playlistId}/videos/{playlistElementId}:
3449 summary: Update a playlist element
3450 operationId: putVideoPlaylistVideo
3456 - $ref: '#/components/parameters/playlistId'
3457 - $ref: '#/components/parameters/playlistElementId'
3460 description: successful operation
3470 description: Start the video at this specific timestamp
3474 description: Stop the video at this specific timestamp
3476 summary: Delete an element from a playlist
3477 operationId: delVideoPlaylistVideo
3483 - $ref: '#/components/parameters/playlistId'
3484 - $ref: '#/components/parameters/playlistElementId'
3487 description: successful operation
3489 '/users/me/video-playlists/videos-exist':
3491 summary: Check video exists in my playlists
3500 description: The video ids to check
3504 $ref: '#/components/schemas/Video/properties/id'
3507 description: successful operation
3529 '/accounts/{name}/video-channels':
3531 summary: List video channels of an account
3536 - $ref: '#/components/parameters/name'
3539 description: include view statistics for the last 30 days (only if authentified as the account user)
3542 - $ref: '#/components/parameters/start'
3543 - $ref: '#/components/parameters/count'
3544 - $ref: '#/components/parameters/sort'
3547 description: successful operation
3551 $ref: '#/components/schemas/VideoChannelList'
3553 '/accounts/{name}/ratings':
3555 summary: List ratings of an account
3561 - $ref: '#/components/parameters/name'
3562 - $ref: '#/components/parameters/start'
3563 - $ref: '#/components/parameters/count'
3564 - $ref: '#/components/parameters/sort'
3568 description: Optionally filter which ratings to retrieve
3576 description: successful operation
3582 $ref: '#/components/schemas/VideoRating'
3584 '/videos/{id}/comment-threads':
3586 summary: List threads of a video
3590 - $ref: '#/components/parameters/idOrUUID'
3591 - $ref: '#/components/parameters/start'
3592 - $ref: '#/components/parameters/count'
3593 - $ref: '#/components/parameters/commentsSort'
3596 description: successful operation
3600 $ref: '#/components/schemas/CommentThreadResponse'
3602 summary: Create a thread
3608 - $ref: '#/components/parameters/idOrUUID'
3611 description: successful operation
3615 $ref: '#/components/schemas/CommentThreadPostResponse'
3617 description: video does not exist
3626 - $ref: '#/components/schemas/VideoComment/properties/text'
3632 '/videos/{id}/comment-threads/{threadId}':
3634 summary: Get a thread
3638 - $ref: '#/components/parameters/idOrUUID'
3639 - $ref: '#/components/parameters/threadId'
3642 description: successful operation
3646 $ref: '#/components/schemas/VideoCommentThreadTree'
3648 '/videos/{id}/comments/{commentId}':
3650 summary: Reply to a thread of a video
3656 - $ref: '#/components/parameters/idOrUUID'
3657 - $ref: '#/components/parameters/commentId'
3660 description: successful operation
3664 $ref: '#/components/schemas/CommentThreadPostResponse'
3666 description: thread or video does not exist
3675 - $ref: '#/components/schemas/VideoComment/properties/text'
3681 summary: Delete a comment or a reply
3687 - $ref: '#/components/parameters/idOrUUID'
3688 - $ref: '#/components/parameters/commentId'
3691 description: successful operation
3693 description: cannot remove comment of another user
3695 description: comment or video does not exist
3697 description: comment is already deleted
3699 '/videos/{id}/rate':
3701 summary: Like/dislike a video
3707 - $ref: '#/components/parameters/idOrUUID'
3723 description: successful operation
3725 description: video does not exist
3729 summary: Delete video HLS files
3735 operationId: delVideoHLS
3737 - $ref: '#/components/parameters/idOrUUID'
3740 description: successful operation
3742 description: video does not exist
3743 '/videos/{id}/webtorrent':
3745 summary: Delete video WebTorrent files
3751 operationId: delVideoWebTorrent
3753 - $ref: '#/components/parameters/idOrUUID'
3756 description: successful operation
3758 description: video does not exist
3760 '/videos/{id}/transcoding':
3762 summary: Create a transcoding job
3768 operationId: createVideoTranscoding
3770 - $ref: '#/components/parameters/idOrUUID'
3786 description: successful operation
3788 description: video does not exist
3794 summary: Search videos
3795 operationId: searchVideos
3800 allowEmptyValue: false
3802 String to search. If the user can make a remote URI search, and the string is an URI then the
3803 PeerTube instance will fetch the remote object and add it to its database. Then,
3804 you can use the REST API to fetch the complete video information and interact with it.
3807 - $ref: '#/components/parameters/categoryOneOf'
3808 - $ref: '#/components/parameters/isLive'
3809 - $ref: '#/components/parameters/tagsOneOf'
3810 - $ref: '#/components/parameters/tagsAllOf'
3811 - $ref: '#/components/parameters/licenceOneOf'
3812 - $ref: '#/components/parameters/languageOneOf'
3813 - $ref: '#/components/parameters/nsfw'
3814 - $ref: '#/components/parameters/isLocal'
3815 - $ref: '#/components/parameters/include'
3816 - $ref: '#/components/parameters/privacyOneOf'
3817 - $ref: '#/components/parameters/hasHLSFiles'
3818 - $ref: '#/components/parameters/hasWebtorrentFiles'
3819 - $ref: '#/components/parameters/skipCount'
3820 - $ref: '#/components/parameters/start'
3821 - $ref: '#/components/parameters/count'
3822 - $ref: '#/components/parameters/searchTarget'
3823 - $ref: '#/components/parameters/videosSearchSort'
3826 description: Get videos that are published after this date
3832 description: Get videos that are published before this date
3836 - name: originallyPublishedStartDate
3838 description: Get videos that are originally published after this date
3842 - name: originallyPublishedEndDate
3844 description: Get videos that are originally published before this date
3850 description: Get videos that have this minimum duration
3855 description: Get videos that have this maximum duration
3859 'searchTarget === search-index':
3860 $ref: '#/components/callbacks/searchIndex'
3863 description: successful operation
3867 $ref: '#/components/schemas/VideoListResponse'
3869 description: search index unavailable
3871 /search/video-channels:
3875 summary: Search channels
3876 operationId: searchChannels
3882 String to search. If the user can make a remote URI search, and the string is an URI then the
3883 PeerTube instance will fetch the remote object and add it to its database. Then,
3884 you can use the REST API to fetch the complete channel information and interact with it.
3887 - $ref: '#/components/parameters/start'
3888 - $ref: '#/components/parameters/count'
3889 - $ref: '#/components/parameters/searchTarget'
3890 - $ref: '#/components/parameters/sort'
3892 'searchTarget === search-index':
3893 $ref: '#/components/callbacks/searchIndex'
3896 description: successful operation
3900 $ref: '#/components/schemas/VideoChannelList'
3902 description: search index unavailable
3904 /search/video-playlists:
3908 summary: Search playlists
3909 operationId: searchPlaylists
3915 String to search. If the user can make a remote URI search, and the string is an URI then the
3916 PeerTube instance will fetch the remote object and add it to its database. Then,
3917 you can use the REST API to fetch the complete playlist information and interact with it.
3920 - $ref: '#/components/parameters/start'
3921 - $ref: '#/components/parameters/count'
3922 - $ref: '#/components/parameters/searchTarget'
3923 - $ref: '#/components/parameters/sort'
3925 'searchTarget === search-index':
3926 $ref: '#/components/callbacks/searchIndex'
3929 description: successful operation
3941 $ref: '#/components/schemas/VideoPlaylist'
3943 description: search index unavailable
3950 summary: Get block status of accounts/hosts
3955 description: 'Check if these accounts are blocked'
3956 example: [ 'goofy@example.com', 'donald@example.com' ]
3964 description: 'Check if these hosts are blocked'
3965 example: [ 'example.com' ]
3972 description: successful operation
3976 $ref: '#/components/schemas/BlockStatus'
3978 /server/blocklist/accounts:
3982 summary: List account blocks
3987 - $ref: '#/components/parameters/start'
3988 - $ref: '#/components/parameters/count'
3989 - $ref: '#/components/parameters/sort'
3992 description: successful operation
3996 summary: Block an account
4008 example: chocobozzz@example.org
4009 description: account to block, in the form `username@domain`
4014 description: successful operation
4016 description: self-blocking forbidden
4018 '/server/blocklist/accounts/{accountName}':
4022 summary: Unblock an account by its handle
4030 description: account to unblock, in the form `username@domain`
4035 description: successful operation
4037 description: account or account block does not exist
4039 /server/blocklist/servers:
4043 summary: List server blocks
4048 - $ref: '#/components/parameters/start'
4049 - $ref: '#/components/parameters/count'
4050 - $ref: '#/components/parameters/sort'
4053 description: successful operation
4057 summary: Block a server
4070 description: server domain to block
4075 description: successful operation
4077 description: self-blocking forbidden
4079 '/server/blocklist/servers/{host}':
4083 summary: Unblock a server by its domain
4091 description: server domain to unblock
4097 description: successful operation
4099 description: account block does not exist
4101 /server/redundancy/{host}:
4104 - Instance Redundancy
4105 summary: Update a server redundancy policy
4113 description: server domain to mirror
4125 description: allow mirroring of the host's local videos
4130 description: successful operation
4132 description: server is not already known
4134 /server/redundancy/videos:
4138 summary: List videos being mirrored
4139 operationId: getMirroredVideos
4147 description: direction of the mirror
4153 - $ref: '#/components/parameters/start'
4154 - $ref: '#/components/parameters/count'
4155 - $ref: '#/components/parameters/videoRedundanciesSort'
4158 description: successful operation
4164 $ref: '#/components/schemas/VideoRedundancy'
4168 summary: Mirror a video
4169 operationId: putMirroredVideo
4180 $ref: '#/components/schemas/Video/properties/id'
4185 description: successful operation
4187 description: cannot mirror a local video
4189 description: video does not exist
4191 description: video is already mirrored
4193 /server/redundancy/videos/{redundancyId}:
4197 summary: Delete a mirror done on a video
4198 operationId: delMirroredVideo
4203 - name: redundancyId
4206 description: id of an existing redundancy on a video
4211 description: successful operation
4213 description: video redundancy not found
4215 '/feeds/video-comments.{format}':
4219 summary: List comments on videos
4220 operationId: getSyndicatedComments
4225 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4238 description: 'limit listing to a specific video'
4243 description: 'limit listing to a specific account'
4248 description: 'limit listing to a specific account'
4251 - name: videoChannelId
4253 description: 'limit listing to a specific video channel'
4256 - name: videoChannelName
4258 description: 'limit listing to a specific video channel'
4263 description: successful operation
4268 default: 'max-age=900' # 15 min cache
4272 $ref: '#/components/schemas/VideoCommentsForXML'
4275 externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
4276 application/rss+xml:
4278 $ref: '#/components/schemas/VideoCommentsForXML'
4281 externalValue: https://peertube2.cpy.re/feeds/video-comments.rss?filter=local
4284 $ref: '#/components/schemas/VideoCommentsForXML'
4287 externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
4288 application/atom+xml:
4290 $ref: '#/components/schemas/VideoCommentsForXML'
4293 externalValue: https://peertube2.cpy.re/feeds/video-comments.atom?filter=local
4299 externalValue: https://peertube2.cpy.re/feeds/video-comments.json?filter=local
4301 x-summary: field inconsistencies
4304 - videoId filter is mixed with a channel filter
4306 description: video, video channel or account not found
4308 description: accept header unsupported
4310 '/feeds/videos.{format}':
4314 summary: List videos
4315 operationId: getSyndicatedVideos
4320 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4333 description: 'limit listing to a specific account'
4338 description: 'limit listing to a specific account'
4341 - name: videoChannelId
4343 description: 'limit listing to a specific video channel'
4346 - name: videoChannelName
4348 description: 'limit listing to a specific video channel'
4351 - $ref: '#/components/parameters/sort'
4352 - $ref: '#/components/parameters/nsfw'
4353 - $ref: '#/components/parameters/isLocal'
4354 - $ref: '#/components/parameters/include'
4355 - $ref: '#/components/parameters/privacyOneOf'
4356 - $ref: '#/components/parameters/hasHLSFiles'
4357 - $ref: '#/components/parameters/hasWebtorrentFiles'
4360 description: successful operation
4365 default: 'max-age=900' # 15 min cache
4369 $ref: '#/components/schemas/VideosForXML'
4372 externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
4373 application/rss+xml:
4375 $ref: '#/components/schemas/VideosForXML'
4378 externalValue: https://peertube2.cpy.re/feeds/videos.rss?filter=local
4381 $ref: '#/components/schemas/VideosForXML'
4384 externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
4385 application/atom+xml:
4387 $ref: '#/components/schemas/VideosForXML'
4390 externalValue: https://peertube2.cpy.re/feeds/videos.atom?filter=local
4396 externalValue: https://peertube2.cpy.re/feeds/videos.json?filter=local
4398 description: video channel or account not found
4400 description: accept header unsupported
4402 '/feeds/subscriptions.{format}':
4407 summary: List videos of subscriptions tied to a token
4408 operationId: getSyndicatedSubscriptionVideos
4413 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
4426 description: limit listing to a specific account
4432 description: private token allowing access
4436 - $ref: '#/components/parameters/sort'
4437 - $ref: '#/components/parameters/nsfw'
4438 - $ref: '#/components/parameters/isLocal'
4439 - $ref: '#/components/parameters/include'
4440 - $ref: '#/components/parameters/privacyOneOf'
4441 - $ref: '#/components/parameters/hasHLSFiles'
4442 - $ref: '#/components/parameters/hasWebtorrentFiles'
4445 description: successful operation
4450 default: 'max-age=900' # 15 min cache
4454 $ref: '#/components/schemas/VideosForXML'
4455 application/rss+xml:
4457 $ref: '#/components/schemas/VideosForXML'
4460 $ref: '#/components/schemas/VideosForXML'
4461 application/atom+xml:
4463 $ref: '#/components/schemas/VideosForXML'
4468 description: accept header unsupported
4474 summary: List plugins
4475 operationId: getPlugins
4488 - $ref: '#/components/parameters/start'
4489 - $ref: '#/components/parameters/count'
4490 - $ref: '#/components/parameters/sort'
4493 description: successful operation
4497 $ref: '#/components/schemas/PluginResponse'
4503 summary: List available plugins
4504 operationId: getAvailablePlugins
4517 - name: currentPeerTubeEngine
4521 - $ref: '#/components/parameters/start'
4522 - $ref: '#/components/parameters/count'
4523 - $ref: '#/components/parameters/sort'
4526 description: successful operation
4530 $ref: '#/components/schemas/PluginResponse'
4532 description: plugin index unavailable
4538 summary: Install a plugin
4539 operationId: addPlugin
4552 example: peertube-plugin-auth-ldap
4555 additionalProperties: false
4562 additionalProperties: false
4565 description: successful operation
4567 description: should have either `npmName` or `path` set
4573 summary: Update a plugin
4574 operationId: updatePlugin
4587 example: peertube-plugin-auth-ldap
4590 additionalProperties: false
4597 additionalProperties: false
4600 description: successful operation
4602 description: should have either `npmName` or `path` set
4604 description: existing plugin not found
4610 summary: Uninstall a plugin
4611 operationId: uninstallPlugin
4623 description: name of the plugin/theme in its package.json
4624 example: peertube-plugin-auth-ldap
4629 description: successful operation
4631 description: existing plugin not found
4637 summary: Get a plugin
4638 operationId: getPlugin
4643 - $ref: '#/components/parameters/npmName'
4646 description: successful operation
4650 $ref: '#/components/schemas/Plugin'
4652 description: plugin not found
4654 /plugins/{npmName}/settings:
4658 summary: Set a plugin's settings
4663 - $ref: '#/components/parameters/npmName'
4672 additionalProperties: true
4675 description: successful operation
4677 description: plugin not found
4679 /plugins/{npmName}/public-settings:
4683 summary: Get a plugin's public settings
4685 - $ref: '#/components/parameters/npmName'
4688 description: successful operation
4693 additionalProperties: true
4695 description: plugin not found
4697 /plugins/{npmName}/registered-settings:
4701 summary: Get a plugin's registered settings
4706 - $ref: '#/components/parameters/npmName'
4709 description: successful operation
4714 additionalProperties: true
4716 description: plugin not found
4719 - url: 'https://peertube2.cpy.re/api/v1'
4720 description: Live Test Server (live data - latest nightly version)
4721 - url: 'https://peertube3.cpy.re/api/v1'
4722 description: Live Test Server (live data - latest RC version)
4723 - url: 'https://peertube.cpy.re/api/v1'
4724 description: Live Test Server (live data - stable version)
4731 description: Offset used to paginate results
4739 description: "Number of items to return"
4749 description: Sort column
4757 description: Plain text search, applied to various parts of the model depending on endpoint
4765 If the administrator enabled search index support, you can override the default search target.
4768 **Warning**: If you choose to make an index search, PeerTube will get results from a third party service.
4769 It means the instance may not yet know the objects you fetched. If you want to load video/channel information:
4770 * If the current user has the ability to make a remote URI search (this information is available in the config endpoint),
4771 then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database.
4772 After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
4773 * 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
4774 the data from the origin instance API
4784 description: Sort videos by criteria
4800 description: Sort videos by criteria
4815 description: Sort comments by criteria
4825 description: Sort blocklists by criteria
4841 description: Plain text search that will match with user usernames or emails
4848 description: Filter results down to (un)banned users
4855 description: Sort users by criteria
4866 description: Sort abuses by criteria
4873 videoRedundanciesSort:
4877 description: Sort abuses by criteria
4886 description: Sort followers by criteria
4895 description: The username or handle of the account
4898 example: chocobozzz | chocobozzz@example.org
4903 description: Entity id
4905 $ref: '#/components/schemas/id'
4910 description: The object id, uuid or short uuid
4913 - $ref: '#/components/schemas/id'
4914 - $ref: '#/components/schemas/UUIDv4'
4915 - $ref: '#/components/schemas/shortUUID'
4920 description: Playlist id
4922 $ref: '#/components/schemas/VideoPlaylist/properties/id'
4924 name: playlistElementId
4927 description: Playlist element id
4929 $ref: '#/components/schemas/id'
4934 description: Abuse id
4936 $ref: '#/components/schemas/Abuse/properties/id'
4938 name: abuseMessageId
4941 description: Abuse message id
4943 $ref: '#/components/schemas/AbuseMessage/properties/id'
4945 name: captionLanguage
4948 description: The caption language
4950 $ref: '#/components/schemas/VideoLanguageSet'
4955 description: The video channel handle
4958 example: my_username | my_username@example.com
4960 name: subscriptionHandle
4963 description: The subscription handle
4966 example: my_username | my_username@example.com
4971 description: The thread id (root comment id)
4978 description: The comment id
4980 $ref: '#/components/schemas/VideoComment/properties/id'
4985 description: whether or not the video is a live
4992 description: category id of the video (see [/videos/categories](#operation/getCategories))
4995 - $ref: '#/components/schemas/VideoCategorySet'
4998 $ref: '#/components/schemas/VideoCategorySet'
5005 description: tag(s) of the video
5019 description: tag(s) of the video, where all should be present in the video
5032 description: language id of the video (see [/videos/languages](#operation/getLanguages)). Use `_unknown` to filter on videos that don't have a video language
5035 - $ref: '#/components/schemas/VideoLanguageSet'
5038 $ref: '#/components/schemas/VideoLanguageSet'
5045 description: licence id of the video (see [/videos/licences](#operation/getLicences))
5048 - $ref: '#/components/schemas/VideoLicenceSet'
5051 $ref: '#/components/schemas/VideoLicenceSet'
5058 description: if you don't need the `total` in the response
5069 description: whether to include nsfw videos, if any
5081 description: '**PeerTube >= 4.0** Display only local or remote videos'
5088 description: '**PeerTube >= 4.0** Display only videos that have HLS files'
5090 name: hasWebtorrentFiles
5095 description: '**PeerTube >= 4.0** Display only videos that have WebTorrent files'
5101 $ref: '#/components/schemas/VideoPrivacySet'
5102 description: '**PeerTube >= 4.0** Display only videos in this specific privacy/privacies'
5116 **PeerTube >= 4.0** Include additional videos in results (can be combined using bitwise or operator)
5120 - `1` NOT_PUBLISHED_STATE
5131 description: list of uris to check if each is part of the user subscriptions
5141 description: name of the plugin/theme on npmjs.com or in its package.json
5144 example: peertube-plugin-auth-ldap
5149 description: job type
5153 - activitypub-follow
5154 - activitypub-http-broadcast
5155 - activitypub-http-fetcher
5156 - activitypub-http-unicast
5161 - videos-views-stats
5162 - activitypub-refresher
5187 Authenticating via OAuth requires the following steps:
5188 - Have an activated account
5189 - [Generate] an access token for that account at `/api/v1/users/token`.
5190 - Make requests with the *Authorization: Bearer <token\>* header
5191 - Profit, depending on the role assigned to the account
5193 Note that the __access token is valid for 1 day__ and is given
5194 along with a __refresh token valid for 2 weeks__.
5196 [Generate]: https://docs.joinpeertube.org/api-rest-getting-started
5200 tokenUrl: /api/v1/users/token
5203 moderator: Moderator scope
5206 # Resuable core properties
5214 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
5215 pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
5220 description: translation of a uuid v4 with a bigger alphabet to have a shorter uuid
5221 example: 2y84q2MQUMWPbiEcxNXMgC
5224 description: immutable name of the user, used to find or mention its actor
5226 pattern: '/^[a-z0-9._]+$/'
5231 description: immutable name of the channel, used to interact with its actor
5232 example: framasoft_videos
5233 pattern: '/^[a-zA-Z0-9\\-_.:]+$/'
5244 description: category id of the video (see [/videos/categories](#operation/getCategories))
5246 VideoConstantNumber-Category:
5249 $ref: '#/components/schemas/VideoCategorySet'
5252 example: Science & Technology
5256 description: licence id of the video (see [/videos/licences](#operation/getLicences))
5258 VideoConstantNumber-Licence:
5261 $ref: '#/components/schemas/VideoLicenceSet'
5264 example: Attribution - Share Alike
5268 description: language id of the video (see [/videos/languages](#operation/getLanguages))
5270 VideoConstantString-Language:
5273 $ref: '#/components/schemas/VideoLanguageSet'
5278 VideoPlaylistPrivacySet:
5284 description: Video playlist privacy policy (see [/video-playlists/privacies])
5285 VideoPlaylistPrivacyConstant:
5288 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
5292 VideoPlaylistTypeSet:
5297 description: The video playlist type (Regular = `1`, Watch Later = `2`)
5298 VideoPlaylistTypeConstant:
5301 $ref: '#/components/schemas/VideoPlaylistTypeSet'
5312 description: privacy id of the video (see [/videos/privacies](#operation/getPrivacyPolicies))
5313 VideoPrivacyConstant:
5316 $ref: '#/components/schemas/VideoPrivacySet'
5324 additionalProperties:
5325 x-additionalPropertiesName: account
5334 additionalProperties:
5335 x-additionalPropertiesName: host
5356 description: 'The user role (Admin = `0`, Moderator = `1`, User = `2`)'
5363 description: 'Admin flags for the user (None = `0`, Bypass video blocklist = `1`)'
5366 LiveVideoLatencyMode:
5372 description: 'The live latency mode (Default = `1`, HIght latency = `2`, Small Latency = `3`)'
5382 description: 'The video state (Published = `1`, to transcode = `2`, to import = `3`)'
5392 description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
5396 $ref: '#/components/schemas/AbuseStateSet'
5399 AbusePredefinedReasons:
5412 example: [spamOrMisleading]
5417 Video resolution (`0`, `240`, `360`, `720`, `1080`, `1440` or `2160`)
5419 `0` is used as a special value for stillimage videos dedicated to audio, a.k.a. audio-only videos.
5421 VideoResolutionConstant:
5422 description: resolutions and their labels for the video
5425 $ref: '#/components/schemas/VideoResolutionSet'
5429 VideoScheduledUpdate:
5432 $ref: '#/components/schemas/VideoPrivacySet'
5436 description: When to update the video
5456 $ref: '#/components/schemas/ActorImage'
5457 VideoChannelSummary:
5460 $ref: '#/components/schemas/id'
5474 $ref: '#/components/schemas/ActorImage'
5488 - $ref: '#/components/schemas/Video'
5495 description: magnet URI allowing to resolve the video via BitTorrent without a metainfo file
5496 pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
5498 $ref: '#/components/schemas/VideoResolutionConstant'
5501 description: Video file size in bytes
5504 description: Direct URL of the torrent file
5508 description: URL endpoint that transfers the torrent file as an attachment (so that the browser opens a download dialog)
5512 description: Direct URL of the video
5516 description: URL endpoint that transfers the video file as an attachment (so that the browser opens a download dialog)
5520 description: Frames per second of the video file
5524 description: URL dereferencing the output of ffprobe on the file
5525 VideoStreamingPlaylists:
5530 $ref: '#/components/schemas/id'
5538 - $ref: '#/components/schemas/VideoStreamingPlaylists-HLS'
5539 VideoStreamingPlaylists-HLS:
5550 Video files associated to this playlist.
5552 The difference with the root `files` property is that these files are fragmented, so they can be used in this streaming playlist (HLS, etc.)
5554 $ref: '#/components/schemas/VideoFile'
5566 $ref: '#/components/schemas/Video/properties/id'
5568 $ref: '#/components/schemas/Video/properties/uuid'
5570 $ref: '#/components/schemas/Video/properties/name'
5574 description: object id for the video
5576 - $ref: '#/components/schemas/id'
5578 description: universal identifier for the video, that can be used across instances
5580 - $ref: '#/components/schemas/UUIDv4'
5583 - $ref: '#/components/schemas/shortUUID'
5589 example: 2017-10-01T10:52:46.396Z
5590 description: time at which the video object was first drafted
5594 example: 2018-10-01T10:52:46.396Z
5595 description: time at which the video was marked as ready for playback (with restrictions depending on `privacy`). Usually set after a `state` evolution.
5599 example: 2021-05-04T08:01:01.502Z
5600 description: last time the video's metadata was modified
5601 originallyPublishedAt:
5604 example: 2010-10-01T10:52:46.396Z
5605 description: used to represent a date of first publication, prior to the practical publication date of `publishedAt`
5608 - $ref: '#/components/schemas/VideoConstantNumber-Category'
5609 description: category in which the video is classified
5612 - $ref: '#/components/schemas/VideoConstantNumber-Licence'
5613 description: licence under which the video is distributed
5616 - $ref: '#/components/schemas/VideoConstantString-Language'
5617 description: main language used in the video
5620 - $ref: '#/components/schemas/VideoPrivacyConstant'
5621 description: privacy policy used to distribute the video
5625 **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n
5626 **Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\r\n*A decentralized video hosting network, based on fr...
5630 truncated description of the video, written in Markdown.
5631 Resolve `descriptionPath` to get the full description of maximum `10000` characters.
5636 description: duration of the video in seconds
5641 description: title of the video
5642 example: What is PeerTube?
5647 example: /static/thumbnails/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
5650 example: /lazy-static/previews/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
5653 example: /videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee
5670 - $ref: '#/components/schemas/VideoStateConstant'
5671 description: represents the internal state of the video processing within the PeerTube instance
5675 - $ref: '#/components/schemas/VideoScheduledUpdate'
5683 $ref: '#/components/schemas/AccountSummary'
5685 $ref: '#/components/schemas/VideoChannelSummary'
5694 - $ref: '#/components/schemas/Video'
5699 description: If the video is a live, you have the amount of current viewers
5702 example: /api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180a6d/description
5703 description: path at which to get the full description of maximum `10000` characters
5706 description: A text tell the audience how to support the video creator
5707 example: Please support our work on https://soutenir.framasoft.org/en/ <3
5711 $ref: '#/components/schemas/VideoChannel'
5713 $ref: '#/components/schemas/Account'
5715 example: [flowers, gardening]
5733 - https://peertube2.cpy.re/tracker/announce
5734 - wss://peertube2.cpy.re/tracker/socket
5738 $ref: '#/components/schemas/VideoFile'
5740 WebTorrent/raw video files. If WebTorrent is disabled on the server:
5742 - field will be empty
5743 - video files will be found in `streamingPlaylists[].files` field
5747 $ref: '#/components/schemas/VideoStreamingPlaylists'
5749 HLS playlists/manifest files. If HLS is disabled on the server:
5751 - field will be empty
5752 - video files will be found in `files` field
5753 FileRedundancyInformation:
5756 $ref: '#/components/schemas/id'
5781 $ref: '#/components/schemas/id'
5788 $ref: '#/components/schemas/UUIDv4'
5795 $ref: '#/components/schemas/FileRedundancyInformation'
5799 $ref: '#/components/schemas/FileRedundancyInformation'
5800 VideoImportStateConstant:
5808 description: 'The video import state (Pending = `1`, Success = `2`, Failed = `3`)'
5815 additionalProperties: false
5819 $ref: '#/components/schemas/VideoImport/properties/targetUrl'
5820 required: [targetUrl]
5823 $ref: '#/components/schemas/VideoImport/properties/magnetUri'
5824 required: [magnetUri]
5827 $ref: '#/components/schemas/VideoImport/properties/torrentfile'
5828 required: [torrentfile]
5829 - $ref: '#/components/schemas/VideoUploadRequestCommon'
5838 - $ref: '#/components/schemas/id'
5842 description: remote URL where to find the import's source video
5843 example: https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d
5847 description: magnet URI allowing to resolve the import's source video
5848 pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
5853 description: Torrent file containing only the video file
5860 - $ref: '#/components/schemas/VideoImportStateConstant'
5876 - $ref: '#/components/schemas/Video'
5886 $ref: '#/components/schemas/VideoImport'
5890 $ref: '#/components/schemas/id'
5893 example: The video is a spam
5897 $ref: '#/components/schemas/AbusePredefinedReasons'
5899 $ref: '#/components/schemas/Account'
5901 $ref: '#/components/schemas/AbuseStateConstant'
5904 example: Decided to ban the server since it spams us regularly
5908 $ref: '#/components/schemas/VideoInfo'
5915 $ref: '#/components/schemas/id'
5926 $ref: '#/components/schemas/AccountSummary'
5930 $ref: '#/components/schemas/id'
5932 $ref: '#/components/schemas/Video/properties/id'
5944 $ref: '#/components/schemas/UUIDv4'
5962 $ref: '#/components/schemas/id'
5964 $ref: '#/components/schemas/UUIDv4'
5967 - $ref: '#/components/schemas/shortUUID'
5990 $ref: '#/components/schemas/VideoPlaylistPrivacyConstant'
5992 $ref: '#/components/schemas/VideoPlaylistTypeConstant'
5994 $ref: '#/components/schemas/AccountSummary'
5996 $ref: '#/components/schemas/VideoChannelSummary'
6000 $ref: '#/components/schemas/id'
6007 description: Text of the comment
6009 example: This video is wonderful!
6011 $ref: '#/components/schemas/id'
6015 - $ref: '#/components/schemas/id'
6017 $ref: '#/components/schemas/Video/properties/id'
6032 totalRepliesFromVideoAuthor:
6039 $ref: '#/components/schemas/Account'
6040 VideoCommentThreadTree:
6043 $ref: '#/components/schemas/VideoComment'
6047 $ref: '#/components/schemas/VideoCommentThreadTree'
6051 $ref: '#/components/schemas/VideoConstantString-Language'
6069 $ref: '#/components/schemas/id'
6080 $ref: '#/components/schemas/ActorImage'
6084 $ref: '#/components/schemas/id'
6089 description: immutable name of the actor, used to find or mention it
6091 - $ref: '#/components/schemas/username'
6095 description: server on which the actor is resident
6096 hostRedundancyAllowed:
6098 description: whether this actor's host allows redundancy of its videos
6102 description: number of actors subscribed to by this actor, as seen by this instance
6106 description: number of followers of this actor, as seen by this instance
6115 - $ref: '#/components/schemas/Actor'
6118 description: object id for the user tied to this account
6120 - $ref: '#/components/schemas/User/properties/id'
6123 description: editable name of the account, displayed in its representations
6128 description: text or bio displayed on the account's profile
6134 description: timestamp within the video, in seconds
6166 VideoStatsRetention:
6178 VideoStatsTimeserie:
6255 allowedForCurrentIP:
6257 requiresEmailVerification:
6275 $ref: '#/components/schemas/VideoResolutionSet'
6360 example: 16810141515
6469 requiresEmailVerification:
6484 description: Settings that apply to new users, if registration is enabled
6488 example: 16810141515
6494 description: Settings pertaining to transcoding jobs
6498 allowAdditionalExtensions:
6500 description: Allow your users to upload .mkv, .mov, .avi, .wmv, .flv, .f4v, .3g2, .3gp, .mts, m2ts, .mxf, .nut videos
6503 description: If a user uploads an audio file, PeerTube will create a video by merging the preview file and the audio file
6506 description: Amount of threads used by ffmpeg for 1 transcoding job
6509 description: Amount of transcoding jobs to execute in parallel
6515 New profiles can be added by plugins ; available in core PeerTube: 'default'.
6518 description: Resolutions to transcode _new videos_ to
6540 description: WebTorrent-specific settings
6546 description: HLS-specific settings
6596 $ref: '#/components/schemas/id'
6598 $ref: '#/components/schemas/Actor'
6600 $ref: '#/components/schemas/Actor'
6603 description: score reflecting the reachability of the actor, with steps of `10` and a base score of `1000`.
6616 PredefinedAbuseReasons:
6617 description: Reason categories that help triage reports
6635 $ref: '#/components/schemas/id'
6647 - activitypub-http-unicast
6648 - activitypub-http-broadcast
6649 - activitypub-http-fetcher
6650 - activitypub-follow
6655 - videos-views-stats
6656 - activitypub-refresher
6660 additionalProperties: true
6663 additionalProperties: true
6679 $ref: '#/components/schemas/id'
6684 $ref: '#/components/schemas/id'
6685 VideoUploadRequestCommon:
6688 description: Video name
6690 example: What is PeerTube?
6694 description: Channel id that will contain this video
6699 $ref: '#/components/schemas/VideoPrivacySet'
6701 $ref: '#/components/schemas/VideoCategorySet'
6703 $ref: '#/components/schemas/VideoLicenceSet'
6705 $ref: '#/components/schemas/VideoLanguageSet'
6707 description: Video description
6710 **[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)**
6712 description: Whether or not we wait transcoding before publish the video
6715 description: A text tell the audience how to support the video creator
6716 example: Please support our work on https://soutenir.framasoft.org/en/ <3
6719 description: Whether or not this video contains sensitive content
6722 description: Video tags (maximum 5 tags each between 2 and 30 characters)
6735 description: Enable or disable comments for this video
6738 description: Enable or disable downloading for this video
6740 originallyPublishedAt:
6741 description: Date when the content was originally published
6745 $ref: '#/components/schemas/VideoScheduledUpdate'
6747 description: Video thumbnail file
6751 description: Video preview file
6757 VideoUploadRequestLegacy:
6759 - $ref: '#/components/schemas/VideoUploadRequestCommon'
6765 description: Video file
6768 VideoUploadRequestResumable:
6770 - $ref: '#/components/schemas/VideoUploadRequestCommon'
6776 description: Video filename including extension
6779 example: what_is_peertube.mp4
6781 description: Video thumbnail file
6785 description: Video preview file
6788 VideoUploadResponse:
6794 $ref: '#/components/schemas/Video/properties/id'
6796 $ref: '#/components/schemas/Video/properties/uuid'
6798 $ref: '#/components/schemas/Video/properties/shortUUID'
6799 CommentThreadResponse:
6808 $ref: '#/components/schemas/VideoComment'
6809 CommentThreadPostResponse:
6812 $ref: '#/components/schemas/VideoComment'
6822 $ref: '#/components/schemas/Video'
6826 $ref: '#/components/schemas/Account'
6829 description: Automatically start playing the upcoming video after the currently playing video
6830 autoPlayNextVideoPlaylist:
6832 description: Automatically start playing the video on the playlist after the currently playing video
6835 description: Automatically start playing the video on the watch page
6845 description: The user email
6848 description: Has the user confirmed their email address?
6851 - $ref: '#/components/schemas/id'
6855 description: Auth plugin to use to authenticate the user
6859 noInstanceConfigWarningModal:
6861 noAccountSetupWarningModal:
6866 $ref: '#/components/schemas/NSFWPolicy'
6868 $ref: '#/components/schemas/UserRole'
6877 description: Theme enabled by this user
6879 $ref: '#/components/schemas/username'
6883 $ref: '#/components/schemas/VideoChannel'
6886 description: The user video quota in bytes
6890 description: The user daily video quota in bytes
6894 description: Enable P2P in the player
6897 - $ref: '#/components/schemas/User'
6899 # optionally present fields: they require WITH_STATS scope
6902 description: Count of videos published
6905 description: Count of reports/abuses of which the user is a target
6906 abusesAcceptedCount:
6908 description: Count of reports/abuses created by the user and accepted/acted upon by the moderation team
6911 description: Count of reports/abuses created by the user
6914 description: Count of comments published
6918 $ref: '#/components/schemas/username'
6920 $ref: '#/components/schemas/password'
6924 description: The user email
6927 description: The user video quota in bytes
6931 description: The user daily video quota in bytes
6934 $ref: '#/components/schemas/usernameChannel'
6936 $ref: '#/components/schemas/UserRole'
6938 $ref: '#/components/schemas/UserAdminFlags'
6949 description: The updated email of the user
6951 - $ref: '#/components/schemas/User/properties/email'
6954 description: Set the email as verified
6957 description: The updated video quota of the user in bytes
6960 description: The updated daily video quota of the user in bytes
6964 description: The auth plugin to use to authenticate the user
6965 example: 'peertube-plugin-auth-saml2'
6967 $ref: '#/components/schemas/UserRole'
6969 $ref: '#/components/schemas/UserAdminFlags'
6971 $ref: '#/components/schemas/password'
6973 # see shared/models/users/user-update-me.model.ts:
6976 $ref: '#/components/schemas/password'
6978 $ref: '#/components/schemas/password'
6980 description: new email used for login and service communications
6982 - $ref: '#/components/schemas/User/properties/email'
6985 description: new name of the user in its representations
6990 description: new NSFW display policy
6997 description: whether to enable P2P in the player or not
7000 description: new preference regarding playing videos automatically
7003 description: new preference regarding playing following videos automatically
7004 autoPlayNextVideoPlaylist:
7006 description: new preference regarding playing following playlist videos automatically
7007 videosHistoryEnabled:
7009 description: whether to keep track of watched history or not
7014 description: list of languages to filter videos down to
7017 noInstanceConfigWarningModal:
7019 noAccountSetupWarningModal:
7026 $ref: '#/components/schemas/id'
7033 description: Rating of the video
7040 $ref: '#/components/schemas/Video'
7047 description: Rating of the video
7054 description: immutable name of the user, used to find or mention its actor
7056 - $ref: '#/components/schemas/username'
7058 $ref: '#/components/schemas/password'
7062 description: email of the user, used for login or service communications
7065 description: editable name of the user, displayed in its representations
7070 description: channel base information used to create the first channel of the user
7073 $ref: '#/components/schemas/usernameChannel'
7085 pattern: /^[a-z0-9]$/
7088 example: v1ikx5hnfop4mdpnci8nsqh93c45rldf
7091 pattern: /^[a-zA-Z0-9]$/
7094 example: AjWiOapPltI6EnsWQwlFarRtLh4u8tDt
7095 OAuthToken-password:
7097 - $ref: '#/components/schemas/OAuthClient'
7107 $ref: '#/components/schemas/User/properties/username'
7109 $ref: '#/components/schemas/password'
7116 OAuthToken-refresh_token:
7118 - $ref: '#/components/schemas/OAuthClient'
7129 example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
7138 - $ref: '#/components/schemas/Actor'
7143 description: editable name of the channel, displayed in its representations
7144 example: Videos of Framasoft
7149 example: Videos made with <3 by Framasoft
7154 description: text shown by default on all videos of this channel, to tell the audience how to support it
7155 example: Please support our work on https://soutenir.framasoft.org/en/ <3
7168 $ref: '#/components/schemas/ActorImage'
7177 $ref: '#/components/schemas/UUIDv4'
7180 - $ref: '#/components/schemas/VideoChannel'
7183 description: username of the channel to create
7185 - $ref: '#/components/schemas/usernameChannel'
7191 - $ref: '#/components/schemas/VideoChannel'
7193 bulkVideosSupportUpdate:
7195 description: Update the support field for all videos of this channel
7205 - $ref: '#/components/schemas/VideoChannel'
7206 - $ref: '#/components/schemas/Actor'
7211 name: 'media:peerLink'
7220 - application/x-bittorrent
7226 name: 'media:content'
7257 VideoCommentsForXML:
7292 description: video watch page URL
7295 description: video canonical URL
7299 description: video publication date
7302 description: video description
7305 description: video description
7308 description: publisher user name
7311 description: video category (MRSS)
7314 description: see [media:community](https://www.rssboard.org/media-rss#media-community) (MRSS)
7329 description: video embed path, relative to the canonical URL domain (MRSS)
7338 description: video watch path, relative to the canonical URL domain (MRSS)
7359 description: see [media:title](https://www.rssboard.org/media-rss#media-title) (MRSS). We only use `plain` titles.
7360 'media:description':
7367 description: see [media:rating](https://www.rssboard.org/media-rss#media-rating) (MRSS)
7370 description: main streamable file for the video
7380 - application/x-bittorrent
7389 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)
7392 - $ref: '#/components/schemas/MRSSPeerLink'
7393 - $ref: '#/components/schemas/MRSSGroupContent'
7394 NotificationSettingValue:
7411 $ref: '#/components/schemas/id'
7415 Notification type, following the `UserNotificationType` enum:
7417 - `1` NEW_VIDEO_FROM_SUBSCRIPTION
7419 - `2` NEW_COMMENT_ON_MY_VIDEO
7421 - `3` NEW_ABUSE_FOR_MODERATORS
7423 - `4` BLACKLIST_ON_MY_VIDEO
7425 - `5` UNBLACKLIST_ON_MY_VIDEO
7427 - `6` MY_VIDEO_PUBLISHED
7429 - `7` MY_VIDEO_IMPORT_SUCCESS
7431 - `8` MY_VIDEO_IMPORT_ERROR
7433 - `9` NEW_USER_REGISTRATION
7437 - `11` COMMENT_MENTION
7439 - `12` VIDEO_AUTO_BLACKLIST_FOR_MODERATORS
7441 - `13` NEW_INSTANCE_FOLLOWER
7443 - `14` AUTO_INSTANCE_FOLLOWING
7445 - `15` ABUSE_STATE_CHANGE
7447 - `16` ABUSE_NEW_MESSAGE
7449 - `17` NEW_PLUGIN_VERSION
7451 - `18` NEW_PEERTUBE_VERSION
7457 - $ref: '#/components/schemas/VideoInfo'
7461 $ref: '#/components/schemas/ActorInfo'
7467 $ref: '#/components/schemas/id'
7470 $ref: '#/components/schemas/VideoInfo'
7475 $ref: '#/components/schemas/VideoImport/properties/magnetUri'
7485 $ref: '#/components/schemas/id'
7489 $ref: '#/components/schemas/VideoInfo'
7491 $ref: '#/components/schemas/ActorInfo'
7497 $ref: '#/components/schemas/id'
7500 - $ref: '#/components/schemas/VideoInfo'
7506 $ref: '#/components/schemas/id'
7509 - $ref: '#/components/schemas/VideoInfo'
7513 - $ref: '#/components/schemas/ActorInfo'
7519 $ref: '#/components/schemas/id'
7521 $ref: '#/components/schemas/ActorInfo'
7549 NotificationListResponse:
7558 $ref: '#/components/schemas/Notification'
7563 example: peertube-plugin-auth-ldap
7591 example: https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-auth-ldap
7594 additionalProperties: true
7610 $ref: '#/components/schemas/Plugin'
7617 description: User can stream multiple times in a permanent live
7620 description: User can select live latency mode if enabled by the instance
7621 $ref: '#/components/schemas/LiveVideoLatencyMode'
7631 description: RTMP stream key to use to stream into this live video
7635 description: User can stream multiple times in a permanent live
7638 description: User can select live latency mode if enabled by the instance
7639 $ref: '#/components/schemas/LiveVideoLatencyMode'
7643 'https://search.example.org/api/v1/search/videos':
7645 summary: third-party search index MAY be used instead of the local index, if enabled by the instance admin. see `searchTarget`
7648 description: successful operation
7652 $ref: '#/components/schemas/VideoListResponse'