]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - support/doc/api/openapi.yaml
make hls/webtorrent fields closely documented in the openapi spec
[github/Chocobozzz/PeerTube.git] / support / doc / api / openapi.yaml
1 openapi: 3.0.0
2 info:
3 title: PeerTube
4 version: 3.1.0
5 contact:
6 name: PeerTube Community
7 url: 'https://joinpeertube.org'
8 license:
9 name: AGPLv3.0
10 url: 'https://github.com/Chocobozzz/PeerTube/blob/master/LICENSE'
11 x-logo:
12 url: 'https://joinpeertube.org/img/brand.png'
13 altText: PeerTube Project Homepage
14 description: |
15 # Introduction
16
17 The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite
18 HTTP/REST library for your programming language to use PeerTube. The spec API is fully compatible with
19 [openapi-generator](https://github.com/OpenAPITools/openapi-generator/wiki/API-client-generator-HOWTO)
20 which generates a client SDK in the language of your choice - we generate some client SDKs automatically:
21
22 - [Python](https://framagit.org/framasoft/peertube/clients/python)
23 - [Go](https://framagit.org/framasoft/peertube/clients/go)
24 - [Kotlin](https://framagit.org/framasoft/peertube/clients/kotlin)
25
26 See the [Quick Start guide](https://docs.joinpeertube.org/api-rest-getting-started) so you can play with the PeerTube API.
27
28 # Authentication
29
30 When you sign up for an account, you are given the possibility to generate
31 sessions, and authenticate using this session token. One session token can
32 currently be used at a time.
33
34 ## Roles
35
36 Accounts are given permissions based on their role. There are three roles on
37 PeerTube: Administrator, Moderator, and User. See the [roles guide](https://docs.joinpeertube.org/admin-managing-users?id=roles) for a detail of their permissions.
38
39 # Errors
40
41 The API uses standard HTTP status codes to indicate the success or failure
42 of the API call. The body of the response will be JSON in the following
43 format.
44
45 ```
46 {
47 "code": "unauthorized_request", // example inner error code
48 "error": "Token is invalid." // example exposed error message
49 }
50 ```
51 externalDocs:
52 url: https://docs.joinpeertube.org/api-rest-reference.html
53 tags:
54 - name: Accounts
55 description: >
56 Accounts encompass remote accounts discovered across the federation,
57 and correspond to the main Actor, along with video channels a user can create, which
58 are also Actors.
59
60 When a comment is posted, it is done with your Account's Actor.
61 - name: Users
62 description: >
63 Using some features of PeerTube require authentication, for which User
64 provide different levels of permission as well as associated user
65 information. Each user has a corresponding local Account for federation.
66 - name: My User
67 description: >
68 Operations related to your own User, when logged-in.
69 - name: My Subscriptions
70 description: >
71 Operations related to your subscriptions to video channels, their
72 new videos, and how to keep up to date with their latest publications!
73 - name: My History
74 description: >
75 Operations related to your watch history.
76 - name: My Notifications
77 description: >
78 Notifications following new videos, follows or reports. They allow you
79 to keep track of the interactions and overall important information that
80 concerns you. You MAY set per-notification type delivery preference, to
81 receive the info either by mail, by in-browser notification or both.
82 - name: Config
83 description: >
84 Each server exposes public information regarding supported videos and
85 options.
86 - name: Job
87 description: >
88 Jobs are long-running tasks enqueued and processed by the instance
89 itself. No additional worker registration is currently available.
90 - name: Instance Follows
91 description: >
92 Managing servers which the instance interacts with is crucial to the
93 concept of federation in PeerTube and external video indexation. The PeerTube
94 server then deals with inter-server ActivityPub operations and propagates
95 information across its social graph by posting activities to actors' inbox
96 endpoints.
97 externalDocs:
98 url: https://docs.joinpeertube.org/admin-following-instances?id=instances-follows
99 - name: Instance Redundancy
100 description: >
101 Redundancy is part of the inter-server solidarity that PeerTube fosters.
102 Manage the list of instances you wish to help by seeding their videos according
103 to the policy of video selection of your choice. Note that you have a similar functionality
104 to mirror individual videos, see `Video Mirroring`.
105 externalDocs:
106 url: https://docs.joinpeertube.org/admin-following-instances?id=instances-redundancy
107 - name: Plugins
108 description: >
109 Managing plugins installed from a local path or from NPM, or search for new ones.
110 externalDocs:
111 url: https://docs.joinpeertube.org/api-plugins
112 - name: Abuses
113 description: |
114 Abuses deal with reports of local or remote videos/comments/accounts alike.
115 - name: Video
116 description: |
117 Operations dealing with listing, uploading, fetching or modifying videos.
118 - name: Search
119 description: |
120 The search helps to find _videos_ or _channels_ from within the instance and beyond.
121 Videos from other instances federated by the instance (that is, instances
122 followed by the instance) can be found via keywords and other criteria of
123 the advanced search.
124
125 Administrators can also enable the use of a remote search system, indexing
126 videos and channels not could be not federated by the instance.
127 - name: Video Comments
128 description: >
129 Operations dealing with comments to a video. Comments are organized in
130 threads.
131 - name: Video Playlists
132 description: >
133 Operations dealing with playlists of videos. Playlists are bound to users
134 and/or channels.
135 - name: Video Channels
136 description: >
137 Operations dealing with the creation, modification and listing of videos within a channel.
138 - name: Video Blocks
139 description: >
140 Operations dealing with blocking videos (removing them from view and
141 preventing interactions).
142 - name: Video Rates
143 description: >
144 Like/dislike a video.
145 - name: Feeds
146 description: >
147 Server syndication feeds
148 x-tagGroups:
149 - name: Accounts
150 tags:
151 - Accounts
152 - Users
153 - My User
154 - My Subscriptions
155 - My Notifications
156 - My History
157 - name: Videos
158 tags:
159 - Video
160 - Video Captions
161 - Video Channels
162 - Video Comments
163 - Video Rates
164 - Video Playlists
165 - Video Ownership Change
166 - Video Mirroring
167 - Live Videos
168 - Feeds
169 - name: Search
170 tags:
171 - Search
172 - name: Moderation
173 tags:
174 - Abuses
175 - Video Blocks
176 - Account Blocks
177 - Server Blocks
178 - name: Instance Configuration
179 tags:
180 - Config
181 - Instance Follows
182 - Instance Redundancy
183 - Plugins
184 - name: Jobs
185 tags:
186 - Job
187 paths:
188 '/accounts/{name}':
189 get:
190 tags:
191 - Accounts
192 summary: Get an account
193 parameters:
194 - $ref: '#/components/parameters/name'
195 responses:
196 '200':
197 description: successful operation
198 content:
199 application/json:
200 schema:
201 $ref: '#/components/schemas/Account'
202 '404':
203 description: account not found
204 '/accounts/{name}/videos':
205 get:
206 tags:
207 - Accounts
208 - Video
209 summary: 'List videos of an account'
210 parameters:
211 - $ref: '#/components/parameters/name'
212 - $ref: '#/components/parameters/categoryOneOf'
213 - $ref: '#/components/parameters/isLive'
214 - $ref: '#/components/parameters/tagsOneOf'
215 - $ref: '#/components/parameters/tagsAllOf'
216 - $ref: '#/components/parameters/licenceOneOf'
217 - $ref: '#/components/parameters/languageOneOf'
218 - $ref: '#/components/parameters/nsfw'
219 - $ref: '#/components/parameters/filter'
220 - $ref: '#/components/parameters/skipCount'
221 - $ref: '#/components/parameters/start'
222 - $ref: '#/components/parameters/count'
223 - $ref: '#/components/parameters/videosSort'
224 responses:
225 '200':
226 description: successful operation
227 content:
228 application/json:
229 schema:
230 $ref: '#/components/schemas/VideoListResponse'
231 x-code-samples:
232 - lang: JavaScript
233 source: |
234 fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
235 .then(function(response) {
236 return response.json()
237 }).then(function(data) {
238 console.log(data)
239 })
240 - lang: Shell
241 source: |
242 ## DEPENDENCIES: jq
243 curl -s https://peertube2.cpy.re/api/v1/accounts/{name}/videos | jq
244 - lang: Ruby
245 source: |
246 require 'net/http'
247 require 'json'
248
249 uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
250
251 http = Net::HTTP.new(uri.host, uri.port)
252 http.use_ssl = true
253
254 response = http.get(uri.request_uri)
255
256 puts JSON.parse(response.read_body)
257 - lang: Python
258 source: |
259 import requests
260
261 r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos")
262 json = r.json()
263
264 print(json)
265 /accounts:
266 get:
267 tags:
268 - Accounts
269 summary: List accounts
270 parameters:
271 - $ref: '#/components/parameters/start'
272 - $ref: '#/components/parameters/count'
273 - $ref: '#/components/parameters/sort'
274 responses:
275 '200':
276 description: successful operation
277 content:
278 'application/json':
279 schema:
280 type: array
281 items:
282 $ref: '#/components/schemas/Account'
283 /config:
284 get:
285 tags:
286 - Config
287 summary: Get instance public configuration
288 responses:
289 '200':
290 description: successful operation
291 content:
292 application/json:
293 schema:
294 $ref: '#/components/schemas/ServerConfig'
295 /config/about:
296 get:
297 summary: Get instance "About" information
298 tags:
299 - Config
300 responses:
301 '200':
302 description: successful operation
303 content:
304 application/json:
305 schema:
306 $ref: '#/components/schemas/ServerConfigAbout'
307 /config/custom:
308 get:
309 summary: Get instance runtime configuration
310 tags:
311 - Config
312 security:
313 - OAuth2:
314 - admin
315 responses:
316 '200':
317 description: successful operation
318 content:
319 application/json:
320 schema:
321 $ref: '#/components/schemas/ServerConfigCustom'
322 put:
323 summary: Set instance runtime configuration
324 tags:
325 - Config
326 security:
327 - OAuth2:
328 - admin
329 responses:
330 '200':
331 description: successful operation
332 '400':
333 x-summary: field inconsistencies
334 description: >
335 Arises when:
336 - the emailer is disabled and the instance is open to registrations
337 - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled
338 delete:
339 summary: Delete instance runtime configuration
340 tags:
341 - Config
342 security:
343 - OAuth2:
344 - admin
345 responses:
346 '200':
347 description: successful operation
348 /jobs/{state}:
349 get:
350 summary: List instance jobs
351 security:
352 - OAuth2:
353 - admin
354 tags:
355 - Job
356 parameters:
357 - name: state
358 in: path
359 required: true
360 description: The state of the job ('' for for no filter)
361 schema:
362 type: string
363 enum:
364 - ''
365 - active
366 - completed
367 - failed
368 - waiting
369 - delayed
370 - $ref: '#/components/parameters/jobType'
371 - $ref: '#/components/parameters/start'
372 - $ref: '#/components/parameters/count'
373 - $ref: '#/components/parameters/sort'
374 responses:
375 '200':
376 description: successful operation
377 content:
378 application/json:
379 schema:
380 type: object
381 properties:
382 total:
383 type: integer
384 example: 1
385 data:
386 type: array
387 maxItems: 100
388 items:
389 $ref: '#/components/schemas/Job'
390 '/server/following/{host}':
391 delete:
392 security:
393 - OAuth2:
394 - admin
395 tags:
396 - Instance Follows
397 summary: Unfollow a server
398 parameters:
399 - name: host
400 in: path
401 required: true
402 description: 'The host to unfollow '
403 schema:
404 type: string
405 format: hostname
406 responses:
407 '201':
408 description: successful operation
409 /server/followers:
410 get:
411 tags:
412 - Instance Follows
413 summary: List instance followers
414 parameters:
415 - $ref: '#/components/parameters/start'
416 - $ref: '#/components/parameters/count'
417 - $ref: '#/components/parameters/sort'
418 responses:
419 '200':
420 description: successful operation
421 content:
422 application/json:
423 schema:
424 type: array
425 items:
426 $ref: '#/components/schemas/Follow'
427 /server/following:
428 get:
429 tags:
430 - Instance Follows
431 summary: List instances followed by the server
432 parameters:
433 - name: state
434 in: query
435 schema:
436 type: string
437 enum:
438 - pending
439 - accepted
440 - name: actorType
441 in: query
442 schema:
443 type: string
444 enum:
445 - Person
446 - Application
447 - Group
448 - Service
449 - Organization
450 - $ref: '#/components/parameters/start'
451 - $ref: '#/components/parameters/count'
452 - $ref: '#/components/parameters/sort'
453 responses:
454 '200':
455 description: successful operation
456 content:
457 application/json:
458 schema:
459 type: array
460 items:
461 $ref: '#/components/schemas/Follow'
462 post:
463 security:
464 - OAuth2:
465 - admin
466 tags:
467 - Instance Follows
468 summary: Follow a server
469 responses:
470 '204':
471 description: successful operation
472 '500':
473 description: cannot follow a non-HTTPS server
474 requestBody:
475 content:
476 application/json:
477 schema:
478 type: object
479 properties:
480 hosts:
481 type: array
482 items:
483 type: string
484 format: hostname
485 uniqueItems: true
486 /users:
487 post:
488 summary: Create a user
489 security:
490 - OAuth2:
491 - admin
492 tags:
493 - Users
494 responses:
495 '200':
496 description: user created
497 content:
498 application/json:
499 schema:
500 $ref: '#/components/schemas/AddUserResponse'
501 links:
502 # GET /users/{id}
503 GetUserId:
504 operationId: getUserId
505 parameters:
506 id: '$response.body#/user/id'
507 # PUT /users/{id}
508 PutUserId:
509 operationId: putUserId
510 parameters:
511 id: '$response.body#/user/id'
512 # DELETE /users/{id}
513 DelUserId:
514 operationId: delUserId
515 parameters:
516 id: '$response.body#/user/id'
517 '403':
518 description: insufficient authority to create an admin or moderator
519 requestBody:
520 content:
521 application/json:
522 schema:
523 $ref: '#/components/schemas/AddUser'
524 description: User to create
525 required: true
526 get:
527 summary: List users
528 security:
529 - OAuth2:
530 - admin
531 tags:
532 - Users
533 parameters:
534 - $ref: '#/components/parameters/usersSearch'
535 - $ref: '#/components/parameters/usersBlocked'
536 - $ref: '#/components/parameters/start'
537 - $ref: '#/components/parameters/count'
538 - $ref: '#/components/parameters/usersSort'
539 responses:
540 '200':
541 description: successful operation
542 content:
543 application/json:
544 schema:
545 type: array
546 items:
547 $ref: '#/components/schemas/User'
548 '/users/{id}':
549 parameters:
550 - $ref: '#/components/parameters/id'
551 delete:
552 summary: Delete a user
553 security:
554 - OAuth2:
555 - admin
556 tags:
557 - Users
558 operationId: delUserId
559 responses:
560 '204':
561 description: successful operation
562 get:
563 summary: Get a user
564 security:
565 - OAuth2: []
566 tags:
567 - Users
568 operationId: getUserId
569 responses:
570 '200':
571 description: successful operation
572 content:
573 application/json:
574 schema:
575 $ref: '#/components/schemas/User'
576 put:
577 summary: Update a user
578 security:
579 - OAuth2: []
580 tags:
581 - Users
582 operationId: putUserId
583 responses:
584 '204':
585 description: successful operation
586 requestBody:
587 content:
588 application/json:
589 schema:
590 $ref: '#/components/schemas/UpdateUser'
591 required: true
592 /users/register:
593 post:
594 summary: Register a user
595 tags:
596 - Users
597 responses:
598 '204':
599 description: successful operation
600 requestBody:
601 content:
602 application/json:
603 schema:
604 $ref: '#/components/schemas/RegisterUser'
605 required: true
606 /users/me:
607 get:
608 summary: Get my user information
609 security:
610 - OAuth2:
611 - user
612 tags:
613 - My User
614 responses:
615 '200':
616 description: successful operation
617 content:
618 application/json:
619 schema:
620 type: array
621 items:
622 $ref: '#/components/schemas/User'
623 put:
624 summary: Update my user information
625 security:
626 - OAuth2:
627 - user
628 tags:
629 - My User
630 responses:
631 '204':
632 description: successful operation
633 requestBody:
634 content:
635 application/json:
636 schema:
637 $ref: '#/components/schemas/UpdateMe'
638 required: true
639 /users/me/videos/imports:
640 get:
641 summary: Get video imports of my user
642 security:
643 - OAuth2:
644 - user
645 tags:
646 - Videos
647 - My User
648 parameters:
649 - $ref: '#/components/parameters/start'
650 - $ref: '#/components/parameters/count'
651 - $ref: '#/components/parameters/sort'
652 responses:
653 '200':
654 description: successful operation
655 content:
656 application/json:
657 schema:
658 $ref: '#/components/schemas/VideoImport'
659 /users/me/video-quota-used:
660 get:
661 summary: Get my user used quota
662 security:
663 - OAuth2:
664 - user
665 tags:
666 - My User
667 responses:
668 '200':
669 description: successful operation
670 content:
671 application/json:
672 schema:
673 type: number
674 '/users/me/videos/{videoId}/rating':
675 get:
676 summary: Get rate of my user for a video
677 security:
678 - OAuth2: []
679 tags:
680 - My User
681 - Video Rates
682 parameters:
683 - name: videoId
684 in: path
685 required: true
686 description: 'The video id '
687 schema:
688 type: string
689 responses:
690 '200':
691 description: successful operation
692 content:
693 application/json:
694 schema:
695 $ref: '#/components/schemas/GetMeVideoRating'
696 /users/me/videos:
697 get:
698 summary: Get videos of my user
699 security:
700 - OAuth2:
701 - user
702 tags:
703 - My User
704 - Videos
705 parameters:
706 - $ref: '#/components/parameters/start'
707 - $ref: '#/components/parameters/count'
708 - $ref: '#/components/parameters/sort'
709 responses:
710 '200':
711 description: successful operation
712 content:
713 application/json:
714 schema:
715 $ref: '#/components/schemas/VideoListResponse'
716 /users/me/subscriptions:
717 get:
718 summary: Get my user subscriptions
719 security:
720 - OAuth2:
721 - user
722 tags:
723 - My Subscriptions
724 parameters:
725 - $ref: '#/components/parameters/start'
726 - $ref: '#/components/parameters/count'
727 - $ref: '#/components/parameters/sort'
728 responses:
729 '200':
730 description: successful operation
731 post:
732 tags:
733 - My Subscriptions
734 summary: Add subscription to my user
735 security:
736 - OAuth2:
737 - user
738 requestBody:
739 content:
740 application/json:
741 schema:
742 type: object
743 properties:
744 uri:
745 type: string
746 format: uri
747 description: uri of the video channels to subscribe to
748 required:
749 - uri
750 examples:
751 default:
752 value:
753 uri: 008a0e54-375d-49d0-8379-143202e24152@video.lqdn.fr
754 responses:
755 '200':
756 description: successful operation
757 /users/me/subscriptions/exist:
758 get:
759 summary: Get if subscriptions exist for my user
760 security:
761 - OAuth2:
762 - user
763 tags:
764 - My Subscriptions
765 parameters:
766 - $ref: '#/components/parameters/subscriptionsUris'
767 responses:
768 '200':
769 description: successful operation
770 content:
771 application/json:
772 schema:
773 type: object
774 /users/me/subscriptions/videos:
775 get:
776 summary: List videos of subscriptions of my user
777 security:
778 - OAuth2:
779 - user
780 tags:
781 - My Subscriptions
782 - Videos
783 parameters:
784 - $ref: '#/components/parameters/categoryOneOf'
785 - $ref: '#/components/parameters/isLive'
786 - $ref: '#/components/parameters/tagsOneOf'
787 - $ref: '#/components/parameters/tagsAllOf'
788 - $ref: '#/components/parameters/licenceOneOf'
789 - $ref: '#/components/parameters/languageOneOf'
790 - $ref: '#/components/parameters/nsfw'
791 - $ref: '#/components/parameters/filter'
792 - $ref: '#/components/parameters/skipCount'
793 - $ref: '#/components/parameters/start'
794 - $ref: '#/components/parameters/count'
795 - $ref: '#/components/parameters/videosSort'
796 responses:
797 '200':
798 description: successful operation
799 content:
800 application/json:
801 schema:
802 $ref: '#/components/schemas/VideoListResponse'
803 '/users/me/subscriptions/{subscriptionHandle}':
804 get:
805 summary: Get subscription of my user
806 security:
807 - OAuth2:
808 - user
809 tags:
810 - My Subscriptions
811 parameters:
812 - $ref: '#/components/parameters/subscriptionHandle'
813 responses:
814 '200':
815 description: successful operation
816 content:
817 application/json:
818 schema:
819 $ref: '#/components/schemas/VideoChannel'
820 delete:
821 summary: Delete subscription of my user
822 security:
823 - OAuth2:
824 - user
825 tags:
826 - My Subscriptions
827 parameters:
828 - $ref: '#/components/parameters/subscriptionHandle'
829 responses:
830 '200':
831 description: successful operation
832 /users/me/notifications:
833 get:
834 summary: List my notifications
835 security:
836 - OAuth2: []
837 tags:
838 - My Notifications
839 parameters:
840 - name: unread
841 in: query
842 description: only list unread notifications
843 schema:
844 type: boolean
845 - $ref: '#/components/parameters/start'
846 - $ref: '#/components/parameters/count'
847 - $ref: '#/components/parameters/sort'
848 responses:
849 '200':
850 description: successful operation
851 content:
852 application/json:
853 schema:
854 $ref: '#/components/schemas/NotificationListResponse'
855 /users/me/notifications/read:
856 post:
857 summary: Mark notifications as read by their id
858 security:
859 - OAuth2: []
860 tags:
861 - My Notifications
862 requestBody:
863 content:
864 application/json:
865 schema:
866 type: object
867 properties:
868 ids:
869 type: array
870 description: ids of the notifications to mark as read
871 items:
872 type: integer
873 required:
874 - ids
875 responses:
876 '204':
877 description: successful operation
878 /users/me/notifications/read-all:
879 post:
880 summary: Mark all my notification as read
881 security:
882 - OAuth2: []
883 tags:
884 - My Notifications
885 responses:
886 '204':
887 description: successful operation
888 /users/me/notification-settings:
889 put:
890 summary: Update my notification settings
891 security:
892 - OAuth2: []
893 tags:
894 - My Notifications
895 requestBody:
896 content:
897 application/json:
898 schema:
899 type: object
900 properties:
901 newVideoFromSubscription:
902 $ref: '#/components/schemas/NotificationSettingValue'
903 newCommentOnMyVideo:
904 $ref: '#/components/schemas/NotificationSettingValue'
905 abuseAsModerator:
906 $ref: '#/components/schemas/NotificationSettingValue'
907 videoAutoBlacklistAsModerator:
908 $ref: '#/components/schemas/NotificationSettingValue'
909 blacklistOnMyVideo:
910 $ref: '#/components/schemas/NotificationSettingValue'
911 myVideoPublished:
912 $ref: '#/components/schemas/NotificationSettingValue'
913 myVideoImportFinished:
914 $ref: '#/components/schemas/NotificationSettingValue'
915 newFollow:
916 $ref: '#/components/schemas/NotificationSettingValue'
917 newUserRegistration:
918 $ref: '#/components/schemas/NotificationSettingValue'
919 commentMention:
920 $ref: '#/components/schemas/NotificationSettingValue'
921 newInstanceFollower:
922 $ref: '#/components/schemas/NotificationSettingValue'
923 autoInstanceFollowing:
924 $ref: '#/components/schemas/NotificationSettingValue'
925 responses:
926 '204':
927 description: successful operation
928 /users/me/history/videos:
929 get:
930 summary: List watched videos history
931 security:
932 - OAuth2: []
933 tags:
934 - My History
935 parameters:
936 - $ref: '#/components/parameters/start'
937 - $ref: '#/components/parameters/count'
938 - $ref: '#/components/parameters/search'
939 responses:
940 '200':
941 description: successful operation
942 content:
943 application/json:
944 schema:
945 $ref: '#/components/schemas/VideoListResponse'
946 /users/me/history/videos/remove:
947 post:
948 summary: Clear video history
949 security:
950 - OAuth2: []
951 tags:
952 - My History
953 requestBody:
954 content:
955 multipart/form-data:
956 schema:
957 type: object
958 properties:
959 beforeDate:
960 description: history before this date will be deleted
961 type: string
962 format: date-time
963 responses:
964 '204':
965 description: successful operation
966 /users/me/avatar/pick:
967 post:
968 summary: Update my user avatar
969 security:
970 - OAuth2: []
971 tags:
972 - My User
973 responses:
974 '200':
975 description: successful operation
976 content:
977 application/json:
978 schema:
979 type: object
980 properties:
981 avatar:
982 $ref: '#/components/schemas/ActorImage'
983 '413':
984 description: image file too large
985 headers:
986 X-File-Maximum-Size:
987 schema:
988 type: string
989 format: Nginx size
990 description: Maximum file size for the avatar
991 requestBody:
992 content:
993 multipart/form-data:
994 schema:
995 type: object
996 properties:
997 avatarfile:
998 description: The file to upload.
999 type: string
1000 format: binary
1001 encoding:
1002 avatarfile:
1003 contentType: image/png, image/jpeg
1004 /users/me/avatar:
1005 delete:
1006 summary: Delete my avatar
1007 security:
1008 - OAuth2: []
1009 tags:
1010 - My User
1011 responses:
1012 '204':
1013 description: successful operation
1014
1015 /videos/ownership:
1016 get:
1017 summary: List video ownership changes
1018 tags:
1019 - Video Ownership Change
1020 security:
1021 - OAuth2: []
1022 responses:
1023 '200':
1024 description: successful operation
1025 '/videos/ownership/{id}/accept':
1026 post:
1027 summary: Accept ownership change request
1028 tags:
1029 - Video Ownership Change
1030 security:
1031 - OAuth2: []
1032 parameters:
1033 - $ref: '#/components/parameters/idOrUUID'
1034 responses:
1035 '204':
1036 description: successful operation
1037 '403':
1038 description: cannot terminate an ownership change of another user
1039 '404':
1040 description: video owneship change not found
1041 '/videos/ownership/{id}/refuse':
1042 post:
1043 summary: Refuse ownership change request
1044 tags:
1045 - Video Ownership Change
1046 security:
1047 - OAuth2: []
1048 parameters:
1049 - $ref: '#/components/parameters/idOrUUID'
1050 responses:
1051 '204':
1052 description: successful operation
1053 '403':
1054 description: cannot terminate an ownership change of another user
1055 '404':
1056 description: video owneship change not found
1057 '/videos/{id}/give-ownership':
1058 post:
1059 summary: Request ownership change
1060 tags:
1061 - Video Ownership Change
1062 security:
1063 - OAuth2: []
1064 parameters:
1065 - $ref: '#/components/parameters/idOrUUID'
1066 requestBody:
1067 required: true
1068 content:
1069 application/x-www-form-urlencoded:
1070 schema:
1071 type: object
1072 properties:
1073 username:
1074 type: string
1075 required:
1076 - username
1077 responses:
1078 '204':
1079 description: successful operation
1080 '400':
1081 description: changing video ownership to a remote account is not supported yet
1082 '404':
1083 description: video not found
1084 /videos:
1085 get:
1086 summary: List videos
1087 tags:
1088 - Video
1089 parameters:
1090 - $ref: '#/components/parameters/categoryOneOf'
1091 - $ref: '#/components/parameters/isLive'
1092 - $ref: '#/components/parameters/tagsOneOf'
1093 - $ref: '#/components/parameters/tagsAllOf'
1094 - $ref: '#/components/parameters/licenceOneOf'
1095 - $ref: '#/components/parameters/languageOneOf'
1096 - $ref: '#/components/parameters/nsfw'
1097 - $ref: '#/components/parameters/filter'
1098 - $ref: '#/components/parameters/skipCount'
1099 - $ref: '#/components/parameters/start'
1100 - $ref: '#/components/parameters/count'
1101 - $ref: '#/components/parameters/videosSort'
1102 responses:
1103 '200':
1104 description: successful operation
1105 content:
1106 application/json:
1107 schema:
1108 $ref: '#/components/schemas/VideoListResponse'
1109 /videos/categories:
1110 get:
1111 summary: List available video categories
1112 tags:
1113 - Video
1114 responses:
1115 '200':
1116 description: successful operation
1117 content:
1118 application/json:
1119 schema:
1120 type: array
1121 items:
1122 type: string
1123 examples:
1124 nightly:
1125 externalValue: https://peertube2.cpy.re/api/v1/videos/categories
1126 /videos/licences:
1127 get:
1128 summary: List available video licences
1129 tags:
1130 - Video
1131 responses:
1132 '200':
1133 description: successful operation
1134 content:
1135 application/json:
1136 schema:
1137 type: array
1138 items:
1139 type: string
1140 examples:
1141 nightly:
1142 externalValue: https://peertube2.cpy.re/api/v1/videos/licences
1143 /videos/languages:
1144 get:
1145 summary: List available video languages
1146 tags:
1147 - Video
1148 responses:
1149 '200':
1150 description: successful operation
1151 content:
1152 application/json:
1153 schema:
1154 type: array
1155 items:
1156 type: string
1157 examples:
1158 nightly:
1159 externalValue: https://peertube2.cpy.re/api/v1/videos/languages
1160 /videos/privacies:
1161 get:
1162 summary: List available video privacies
1163 tags:
1164 - Video
1165 responses:
1166 '200':
1167 description: successful operation
1168 content:
1169 application/json:
1170 schema:
1171 type: array
1172 items:
1173 type: string
1174 examples:
1175 nightly:
1176 externalValue: https://peertube2.cpy.re/api/v1/videos/privacies
1177 '/videos/{id}':
1178 put:
1179 summary: Update a video
1180 security:
1181 - OAuth2: []
1182 tags:
1183 - Video
1184 parameters:
1185 - $ref: '#/components/parameters/idOrUUID'
1186 responses:
1187 '204':
1188 description: successful operation
1189 requestBody:
1190 content:
1191 multipart/form-data:
1192 schema:
1193 type: object
1194 properties:
1195 thumbnailfile:
1196 description: Video thumbnail file
1197 type: string
1198 format: binary
1199 previewfile:
1200 description: Video preview file
1201 type: string
1202 format: binary
1203 category:
1204 description: Video category
1205 type: integer
1206 example: 4
1207 licence:
1208 description: Video licence
1209 type: integer
1210 example: 2
1211 language:
1212 description: Video language
1213 type: string
1214 privacy:
1215 $ref: '#/components/schemas/VideoPrivacySet'
1216 description:
1217 description: Video description
1218 type: string
1219 waitTranscoding:
1220 description: Whether or not we wait transcoding before publish the video
1221 type: string
1222 support:
1223 description: A text tell the audience how to support the video creator
1224 example: Please support my work on <insert crowdfunding plateform>! <3
1225 type: string
1226 nsfw:
1227 description: Whether or not this video contains sensitive content
1228 type: boolean
1229 name:
1230 description: Video name
1231 type: string
1232 minLength: 3
1233 maxLength: 120
1234 tags:
1235 description: Video tags (maximum 5 tags each between 2 and 30 characters)
1236 type: array
1237 minItems: 1
1238 maxItems: 5
1239 items:
1240 type: string
1241 minLength: 2
1242 maxLength: 30
1243 commentsEnabled:
1244 description: Enable or disable comments for this video
1245 type: boolean
1246 originallyPublishedAt:
1247 description: Date when the content was originally published
1248 type: string
1249 format: date-time
1250 scheduleUpdate:
1251 $ref: '#/components/schemas/VideoScheduledUpdate'
1252 encoding:
1253 thumbnailfile:
1254 contentType: image/jpeg
1255 previewfile:
1256 contentType: image/jpeg
1257 get:
1258 summary: Get a video
1259 tags:
1260 - Video
1261 parameters:
1262 - $ref: '#/components/parameters/idOrUUID'
1263 responses:
1264 '200':
1265 description: successful operation
1266 content:
1267 application/json:
1268 schema:
1269 $ref: '#/components/schemas/VideoDetails'
1270 delete:
1271 summary: Delete a video
1272 security:
1273 - OAuth2: []
1274 tags:
1275 - Video
1276 parameters:
1277 - $ref: '#/components/parameters/idOrUUID'
1278 responses:
1279 '204':
1280 description: successful operation
1281 '/videos/{id}/description':
1282 get:
1283 summary: Get complete video description
1284 tags:
1285 - Video
1286 parameters:
1287 - $ref: '#/components/parameters/idOrUUID'
1288 responses:
1289 '200':
1290 description: successful operation
1291 content:
1292 application/json:
1293 schema:
1294 type: string
1295 '/videos/{id}/views':
1296 post:
1297 summary: Add a view to a video
1298 tags:
1299 - Video
1300 parameters:
1301 - $ref: '#/components/parameters/idOrUUID'
1302 responses:
1303 '204':
1304 description: successful operation
1305 '/videos/{id}/watching':
1306 put:
1307 summary: Set watching progress of a video
1308 tags:
1309 - Video
1310 security:
1311 - OAuth2: []
1312 parameters:
1313 - $ref: '#/components/parameters/idOrUUID'
1314 requestBody:
1315 content:
1316 application/json:
1317 schema:
1318 $ref: '#/components/schemas/UserWatchingVideo'
1319 required: true
1320 responses:
1321 '204':
1322 description: successful operation
1323 /videos/upload:
1324 post:
1325 summary: Upload a video
1326 security:
1327 - OAuth2: []
1328 tags:
1329 - Video
1330 responses:
1331 '200':
1332 description: successful operation
1333 content:
1334 application/json:
1335 schema:
1336 $ref: '#/components/schemas/VideoUploadResponse'
1337 '400':
1338 description: invalid file field, schedule date or parameter
1339 '403':
1340 description: video didn't pass upload filter
1341 '408':
1342 description: upload has timed out
1343 '413':
1344 description: video file too large, due to quota or max body size limit set by the reverse-proxy
1345 headers:
1346 X-File-Maximum-Size:
1347 schema:
1348 type: string
1349 format: Nginx size
1350 description: Maximum file size for the video
1351 '415':
1352 description: video type unsupported
1353 '422':
1354 description: video unreadable
1355 requestBody:
1356 content:
1357 multipart/form-data:
1358 schema:
1359 type: object
1360 properties:
1361 videofile:
1362 description: Video file
1363 type: string
1364 format: binary
1365 channelId:
1366 description: Channel id that will contain this video
1367 type: integer
1368 thumbnailfile:
1369 description: Video thumbnail file
1370 type: string
1371 format: binary
1372 previewfile:
1373 description: Video preview file
1374 type: string
1375 format: binary
1376 privacy:
1377 $ref: '#/components/schemas/VideoPrivacySet'
1378 category:
1379 description: Video category
1380 type: integer
1381 example: 4
1382 licence:
1383 description: Video licence
1384 type: integer
1385 example: 2
1386 language:
1387 description: Video language
1388 type: string
1389 description:
1390 description: Video description
1391 type: string
1392 waitTranscoding:
1393 description: Whether or not we wait transcoding before publish the video
1394 type: boolean
1395 support:
1396 description: A text tell the audience how to support the video creator
1397 example: Please support my work on <insert crowdfunding plateform>! <3
1398 type: string
1399 nsfw:
1400 description: Whether or not this video contains sensitive content
1401 type: boolean
1402 name:
1403 description: Video name
1404 type: string
1405 minLength: 3
1406 maxLength: 120
1407 tags:
1408 description: Video tags (maximum 5 tags each between 2 and 30 characters)
1409 type: array
1410 minItems: 1
1411 maxItems: 5
1412 uniqueItems: true
1413 items:
1414 type: string
1415 minLength: 2
1416 maxLength: 30
1417 commentsEnabled:
1418 description: Enable or disable comments for this video
1419 type: boolean
1420 downloadEnabled:
1421 description: Enable or disable downloading for this video
1422 type: boolean
1423 originallyPublishedAt:
1424 description: Date when the content was originally published
1425 type: string
1426 format: date-time
1427 scheduleUpdate:
1428 $ref: '#/components/schemas/VideoScheduledUpdate'
1429 required:
1430 - videofile
1431 - channelId
1432 - name
1433 encoding:
1434 videofile:
1435 contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream
1436 thumbnailfile:
1437 contentType: image/jpeg
1438 previewfile:
1439 contentType: image/jpeg
1440 x-code-samples:
1441 - lang: Shell
1442 source: |
1443 ## DEPENDENCIES: jq
1444 USERNAME="<your_username>"
1445 PASSWORD="<your_password>"
1446 FILE_PATH="<your_file_path>"
1447 CHANNEL_ID="<your_channel_id>"
1448 NAME="<video_name>"
1449
1450 API_PATH="https://peertube2.cpy.re/api/v1"
1451 ## AUTH
1452 client_id=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_id")
1453 client_secret=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_secret")
1454 token=$(curl -s "$API_PATH/users/token" \
1455 --data client_id="$client_id" \
1456 --data client_secret="$client_secret" \
1457 --data grant_type=password \
1458 --data response_type=code \
1459 --data username="$USERNAME" \
1460 --data password="$PASSWORD" \
1461 | jq -r ".access_token")
1462 ## VIDEO UPLOAD
1463 curl -s "$API_PATH/videos/upload" \
1464 -H "Authorization: Bearer $token" \
1465 --max-time 600 \
1466 --form videofile=@"$FILE_PATH" \
1467 --form channelId=$CHANNEL_ID \
1468 --form name="$NAME"
1469 /videos/imports:
1470 post:
1471 summary: Import a video
1472 description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
1473 security:
1474 - OAuth2: []
1475 tags:
1476 - Video
1477 requestBody:
1478 content:
1479 multipart/form-data:
1480 schema:
1481 type: object
1482 properties:
1483 torrentfile:
1484 description: Torrent File
1485 type: string
1486 format: binary
1487 targetUrl:
1488 description: HTTP target URL
1489 type: string
1490 magnetUri:
1491 description: Magnet URI
1492 type: string
1493 channelId:
1494 description: Channel id that will contain this video
1495 type: integer
1496 thumbnailfile:
1497 description: Video thumbnail file
1498 type: string
1499 format: binary
1500 previewfile:
1501 description: Video preview file
1502 type: string
1503 format: binary
1504 privacy:
1505 $ref: '#/components/schemas/VideoPrivacySet'
1506 category:
1507 description: Video category
1508 type: integer
1509 example: 4
1510 licence:
1511 description: Video licence
1512 type: integer
1513 example: 2
1514 language:
1515 description: Video language
1516 type: string
1517 description:
1518 description: Video description
1519 type: string
1520 waitTranscoding:
1521 description: Whether or not we wait transcoding before publish the video
1522 type: boolean
1523 support:
1524 description: A text tell the audience how to support the video creator
1525 example: Please support my work on <insert crowdfunding plateform>! <3
1526 type: string
1527 nsfw:
1528 description: Whether or not this video contains sensitive content
1529 type: boolean
1530 name:
1531 description: Video name
1532 type: string
1533 minLength: 3
1534 maxLength: 120
1535 tags:
1536 description: Video tags (maximum 5 tags each between 2 and 30 characters)
1537 type: array
1538 minItems: 1
1539 maxItems: 5
1540 items:
1541 type: string
1542 minLength: 2
1543 maxLength: 30
1544 commentsEnabled:
1545 description: Enable or disable comments for this video
1546 type: boolean
1547 downloadEnabled:
1548 description: Enable or disable downloading for this video
1549 type: boolean
1550 scheduleUpdate:
1551 $ref: '#/components/schemas/VideoScheduledUpdate'
1552 required:
1553 - channelId
1554 - name
1555 encoding:
1556 torrentfile:
1557 contentType: application/x-bittorrent
1558 thumbnailfile:
1559 contentType: image/jpeg
1560 previewfile:
1561 contentType: image/jpeg
1562 responses:
1563 '200':
1564 description: successful operation
1565 content:
1566 application/json:
1567 schema:
1568 $ref: '#/components/schemas/VideoUploadResponse'
1569 '400':
1570 description: '`magnetUri` or `targetUrl` or a torrent file missing'
1571 '403':
1572 description: video didn't pass pre-import filter
1573 '409':
1574 description: HTTP or Torrent/magnetURI import not enabled
1575
1576 /videos/live:
1577 post:
1578 summary: Create a live
1579 security:
1580 - OAuth2: []
1581 tags:
1582 - Live Videos
1583 - Video
1584 responses:
1585 '200':
1586 description: successful operation
1587 content:
1588 application/json:
1589 schema:
1590 $ref: '#/components/schemas/VideoUploadResponse'
1591 '403':
1592 description: Live is not enabled, allow replay is not enabled, or max instance/user live videos limit is exceeded
1593 requestBody:
1594 content:
1595 multipart/form-data:
1596 schema:
1597 type: object
1598 properties:
1599 channelId:
1600 description: Channel id that will contain this live video
1601 type: integer
1602 saveReplay:
1603 type: boolean
1604 permanentLive:
1605 description: User can stream multiple times in a permanent live
1606 type: boolean
1607 thumbnailfile:
1608 description: Live video/replay thumbnail file
1609 type: string
1610 format: binary
1611 previewfile:
1612 description: Live video/replay preview file
1613 type: string
1614 format: binary
1615 privacy:
1616 $ref: '#/components/schemas/VideoPrivacySet'
1617 category:
1618 description: Live video/replay category
1619 type: string
1620 licence:
1621 description: Live video/replay licence
1622 type: string
1623 language:
1624 description: Live video/replay language
1625 type: string
1626 description:
1627 description: Live video/replay description
1628 type: string
1629 support:
1630 description: A text tell the audience how to support the creator
1631 example: Please support my work on <insert crowdfunding plateform>! <3
1632 type: string
1633 nsfw:
1634 description: Whether or not this live video/replay contains sensitive content
1635 type: boolean
1636 name:
1637 description: Live video/replay name
1638 type: string
1639 minLength: 3
1640 maxLength: 120
1641 tags:
1642 description: Live video/replay tags (maximum 5 tags each between 2 and 30 characters)
1643 type: array
1644 minItems: 1
1645 maxItems: 5
1646 items:
1647 type: string
1648 minLength: 2
1649 maxLength: 30
1650 commentsEnabled:
1651 description: Enable or disable comments for this live video/replay
1652 type: boolean
1653 downloadEnabled:
1654 description: Enable or disable downloading for the replay of this live
1655 type: boolean
1656 required:
1657 - channelId
1658 - name
1659 encoding:
1660 thumbnailfile:
1661 contentType: image/jpeg
1662 previewfile:
1663 contentType: image/jpeg
1664
1665 /videos/live/{id}:
1666 get:
1667 summary: Get a live information
1668 security:
1669 - OAuth2: []
1670 tags:
1671 - Live Videos
1672 - Video
1673 parameters:
1674 - $ref: '#/components/parameters/idOrUUID'
1675 responses:
1676 '200':
1677 description: successful operation
1678 content:
1679 application/json:
1680 schema:
1681 $ref: '#/components/schemas/LiveVideoResponse'
1682 put:
1683 summary: Update a live information
1684 security:
1685 - OAuth2: []
1686 tags:
1687 - Live Videos
1688 - Video
1689 parameters:
1690 - $ref: '#/components/parameters/idOrUUID'
1691 requestBody:
1692 content:
1693 application/json:
1694 schema:
1695 $ref: '#/components/schemas/LiveVideoUpdate'
1696 responses:
1697 '204':
1698 description: Successful operation
1699 '400':
1700 description: Bad parameters or trying to update a live that has already started
1701 '403':
1702 description: Trying to save replay of the live but saving replay is not enabled on the instance
1703
1704 /users/me/abuses:
1705 get:
1706 summary: List my abuses
1707 security:
1708 - OAuth2: []
1709 tags:
1710 - Abuses
1711 - My User
1712 parameters:
1713 - name: id
1714 in: query
1715 description: only list the report with this id
1716 schema:
1717 type: integer
1718 - name: state
1719 in: query
1720 schema:
1721 $ref: '#/components/schemas/AbuseStateSet'
1722 - $ref: '#/components/parameters/start'
1723 - $ref: '#/components/parameters/count'
1724 - $ref: '#/components/parameters/abusesSort'
1725 responses:
1726 '200':
1727 description: successful operation
1728 content:
1729 application/json:
1730 schema:
1731 type: array
1732 items:
1733 $ref: '#/components/schemas/Abuse'
1734
1735 /abuses:
1736 get:
1737 summary: List abuses
1738 security:
1739 - OAuth2:
1740 - admin
1741 - moderator
1742 tags:
1743 - Abuses
1744 parameters:
1745 - name: id
1746 in: query
1747 description: only list the report with this id
1748 schema:
1749 type: integer
1750 - name: predefinedReason
1751 in: query
1752 description: predefined reason the listed reports should contain
1753 schema:
1754 $ref: '#/components/schemas/PredefinedAbuseReasons'
1755 - name: search
1756 in: query
1757 description: plain search that will match with video titles, reporter names and more
1758 schema:
1759 type: string
1760 - name: state
1761 in: query
1762 schema:
1763 $ref: '#/components/schemas/AbuseStateSet'
1764 - name: searchReporter
1765 in: query
1766 description: only list reports of a specific reporter
1767 schema:
1768 type: string
1769 - name: searchReportee
1770 description: only list reports of a specific reportee
1771 in: query
1772 schema:
1773 type: string
1774 - name: searchVideo
1775 in: query
1776 description: only list reports of a specific video
1777 schema:
1778 type: string
1779 - name: searchVideoChannel
1780 in: query
1781 description: only list reports of a specific video channel
1782 schema:
1783 type: string
1784 - name: videoIs
1785 in: query
1786 description: only list blacklisted or deleted videos
1787 schema:
1788 type: string
1789 enum:
1790 - 'deleted'
1791 - 'blacklisted'
1792 - name: filter
1793 in: query
1794 description: only list account, comment or video reports
1795 schema:
1796 type: string
1797 enum:
1798 - 'video'
1799 - 'comment'
1800 - 'account'
1801 - $ref: '#/components/parameters/start'
1802 - $ref: '#/components/parameters/count'
1803 - $ref: '#/components/parameters/abusesSort'
1804 responses:
1805 '200':
1806 description: successful operation
1807 content:
1808 application/json:
1809 schema:
1810 type: array
1811 items:
1812 $ref: '#/components/schemas/Abuse'
1813
1814 post:
1815 summary: Report an abuse
1816 security:
1817 - OAuth2: []
1818 tags:
1819 - Abuses
1820 requestBody:
1821 required: true
1822 content:
1823 application/json:
1824 schema:
1825 type: object
1826 properties:
1827 reason:
1828 description: Reason why the user reports this video
1829 type: string
1830 minLength: 2
1831 maxLength: 3000
1832 predefinedReasons:
1833 $ref: '#/components/schemas/PredefinedAbuseReasons'
1834 video:
1835 type: object
1836 properties:
1837 id:
1838 description: Video id to report
1839 type: number
1840 startAt:
1841 type: integer
1842 description: Timestamp in the video that marks the beginning of the report
1843 minimum: 0
1844 endAt:
1845 type: integer
1846 description: Timestamp in the video that marks the ending of the report
1847 minimum: 0
1848 comment:
1849 type: object
1850 properties:
1851 id:
1852 description: Comment id to report
1853 type: number
1854 account:
1855 type: object
1856 properties:
1857 id:
1858 description: Account id to report
1859 type: number
1860 required:
1861 - reason
1862 responses:
1863 '204':
1864 description: successful operation
1865 '400':
1866 description: incorrect request parameters
1867 '/abuses/{abuseId}':
1868 put:
1869 summary: Update an abuse
1870 security:
1871 - OAuth2:
1872 - admin
1873 - moderator
1874 tags:
1875 - Abuses
1876 parameters:
1877 - $ref: '#/components/parameters/abuseId'
1878 requestBody:
1879 content:
1880 application/json:
1881 schema:
1882 type: object
1883 properties:
1884 state:
1885 $ref: '#/components/schemas/AbuseStateSet'
1886 moderationComment:
1887 type: string
1888 description: Update the report comment visible only to the moderation team
1889 minLength: 2
1890 maxLength: 3000
1891 responses:
1892 '204':
1893 description: successful operation
1894 '404':
1895 description: abuse not found
1896 delete:
1897 tags:
1898 - Abuses
1899 summary: Delete an abuse
1900 security:
1901 - OAuth2:
1902 - admin
1903 - moderator
1904 parameters:
1905 - $ref: '#/components/parameters/abuseId'
1906 responses:
1907 '204':
1908 description: successful operation
1909 '404':
1910 description: block not found
1911 '/abuses/{abuseId}/messages':
1912 get:
1913 summary: List messages of an abuse
1914 security:
1915 - OAuth2: []
1916 tags:
1917 - Abuses
1918 parameters:
1919 - $ref: '#/components/parameters/abuseId'
1920 responses:
1921 '200':
1922 description: successful operation
1923 content:
1924 application/json:
1925 schema:
1926 type: array
1927 items:
1928 $ref: '#/components/schemas/AbuseMessage'
1929
1930 post:
1931 summary: Add message to an abuse
1932 security:
1933 - OAuth2: []
1934 tags:
1935 - Abuses
1936 parameters:
1937 - $ref: '#/components/parameters/abuseId'
1938 requestBody:
1939 required: true
1940 content:
1941 application/json:
1942 schema:
1943 type: object
1944 properties:
1945 message:
1946 description: Message to send
1947 type: string
1948 minLength: 2
1949 maxLength: 3000
1950 required:
1951 - message
1952 responses:
1953 '200':
1954 description: successful operation
1955 '400':
1956 description: incorrect request parameters
1957 '/abuses/{abuseId}/messages/{abuseMessageId}':
1958 delete:
1959 summary: Delete an abuse message
1960 security:
1961 - OAuth2: []
1962 tags:
1963 - Abuses
1964 parameters:
1965 - $ref: '#/components/parameters/abuseId'
1966 - $ref: '#/components/parameters/abuseMessageId'
1967 responses:
1968 '204':
1969 description: successful operation
1970
1971 '/videos/{id}/blacklist':
1972 post:
1973 summary: Block a video
1974 security:
1975 - OAuth2:
1976 - admin
1977 - moderator
1978 tags:
1979 - Video Blocks
1980 parameters:
1981 - $ref: '#/components/parameters/idOrUUID'
1982 responses:
1983 '204':
1984 description: successful operation
1985 delete:
1986 summary: Unblock a video by its id
1987 security:
1988 - OAuth2:
1989 - admin
1990 - moderator
1991 tags:
1992 - Video Blocks
1993 parameters:
1994 - $ref: '#/components/parameters/idOrUUID'
1995 responses:
1996 '204':
1997 description: successful operation
1998 '404':
1999 description: block not found
2000 /videos/blacklist:
2001 get:
2002 tags:
2003 - Video Blocks
2004 summary: List video blocks
2005 security:
2006 - OAuth2:
2007 - admin
2008 - moderator
2009 parameters:
2010 - name: type
2011 in: query
2012 description: >
2013 list only blocks that match this type:
2014
2015 - `1`: manual block
2016
2017 - `2`: automatic block that needs review
2018 schema:
2019 type: integer
2020 enum:
2021 - 1
2022 - 2
2023 - name: search
2024 in: query
2025 description: plain search that will match with video titles, and more
2026 schema:
2027 type: string
2028 - $ref: '#/components/parameters/start'
2029 - $ref: '#/components/parameters/count'
2030 - $ref: '#/components/parameters/blacklistsSort'
2031 responses:
2032 '200':
2033 description: successful operation
2034 content:
2035 application/json:
2036 schema:
2037 type: object
2038 properties:
2039 total:
2040 type: integer
2041 example: 1
2042 data:
2043 type: array
2044 items:
2045 $ref: '#/components/schemas/VideoBlacklist'
2046 /videos/{id}/captions:
2047 get:
2048 summary: List captions of a video
2049 tags:
2050 - Video Captions
2051 parameters:
2052 - $ref: '#/components/parameters/idOrUUID'
2053 responses:
2054 '200':
2055 description: successful operation
2056 content:
2057 application/json:
2058 schema:
2059 type: object
2060 properties:
2061 total:
2062 type: integer
2063 example: 1
2064 data:
2065 type: array
2066 items:
2067 $ref: '#/components/schemas/VideoCaption'
2068 /videos/{id}/captions/{captionLanguage}:
2069 put:
2070 summary: Add or replace a video caption
2071 security:
2072 - OAuth2:
2073 - user
2074 tags:
2075 - Video Captions
2076 parameters:
2077 - $ref: '#/components/parameters/idOrUUID'
2078 - $ref: '#/components/parameters/captionLanguage'
2079 requestBody:
2080 content:
2081 multipart/form-data:
2082 schema:
2083 type: object
2084 properties:
2085 captionfile:
2086 description: The file to upload.
2087 type: string
2088 format: binary
2089 encoding:
2090 captionfile:
2091 contentType: text/vtt, application/x-subrip, text/plain
2092 responses:
2093 '204':
2094 description: successful operation
2095 '404':
2096 description: video or language not found
2097 delete:
2098 summary: Delete a video caption
2099 security:
2100 - OAuth2:
2101 - user
2102 tags:
2103 - Video Captions
2104 parameters:
2105 - $ref: '#/components/parameters/idOrUUID'
2106 - $ref: '#/components/parameters/captionLanguage'
2107 responses:
2108 '204':
2109 description: successful operation
2110 '404':
2111 description: video or language or caption for that language not found
2112 /video-channels:
2113 get:
2114 summary: List video channels
2115 tags:
2116 - Video Channels
2117 parameters:
2118 - $ref: '#/components/parameters/start'
2119 - $ref: '#/components/parameters/count'
2120 - $ref: '#/components/parameters/sort'
2121 responses:
2122 '200':
2123 description: successful operation
2124 content:
2125 application/json:
2126 schema:
2127 type: object
2128 properties:
2129 total:
2130 type: integer
2131 example: 1
2132 data:
2133 type: array
2134 items:
2135 $ref: '#/components/schemas/VideoChannel'
2136 post:
2137 summary: Create a video channel
2138 security:
2139 - OAuth2: []
2140 tags:
2141 - Video Channels
2142 responses:
2143 '204':
2144 description: successful operation
2145 requestBody:
2146 content:
2147 application/json:
2148 schema:
2149 $ref: '#/components/schemas/VideoChannelCreate'
2150 '/video-channels/{channelHandle}':
2151 get:
2152 summary: Get a video channel
2153 tags:
2154 - Video Channels
2155 parameters:
2156 - $ref: '#/components/parameters/channelHandle'
2157 responses:
2158 '200':
2159 description: successful operation
2160 content:
2161 application/json:
2162 schema:
2163 $ref: '#/components/schemas/VideoChannel'
2164 put:
2165 summary: Update a video channel
2166 security:
2167 - OAuth2: []
2168 tags:
2169 - Video Channels
2170 parameters:
2171 - $ref: '#/components/parameters/channelHandle'
2172 responses:
2173 '204':
2174 description: successful operation
2175 requestBody:
2176 content:
2177 application/json:
2178 schema:
2179 $ref: '#/components/schemas/VideoChannelUpdate'
2180 delete:
2181 summary: Delete a video channel
2182 security:
2183 - OAuth2: []
2184 tags:
2185 - Video Channels
2186 parameters:
2187 - $ref: '#/components/parameters/channelHandle'
2188 responses:
2189 '204':
2190 description: successful operation
2191 '/video-channels/{channelHandle}/videos':
2192 get:
2193 summary: List videos of a video channel
2194 tags:
2195 - Video
2196 - Video Channels
2197 parameters:
2198 - $ref: '#/components/parameters/channelHandle'
2199 - $ref: '#/components/parameters/categoryOneOf'
2200 - $ref: '#/components/parameters/isLive'
2201 - $ref: '#/components/parameters/tagsOneOf'
2202 - $ref: '#/components/parameters/tagsAllOf'
2203 - $ref: '#/components/parameters/licenceOneOf'
2204 - $ref: '#/components/parameters/languageOneOf'
2205 - $ref: '#/components/parameters/nsfw'
2206 - $ref: '#/components/parameters/filter'
2207 - $ref: '#/components/parameters/skipCount'
2208 - $ref: '#/components/parameters/start'
2209 - $ref: '#/components/parameters/count'
2210 - $ref: '#/components/parameters/videosSort'
2211 responses:
2212 '200':
2213 description: successful operation
2214 content:
2215 application/json:
2216 schema:
2217 $ref: '#/components/schemas/VideoListResponse'
2218 '/video-channels/{channelHandle}/avatar/pick':
2219 post:
2220 summary: Update channel avatar
2221 security:
2222 - OAuth2: []
2223 tags:
2224 - Video Channels
2225 parameters:
2226 - $ref: '#/components/parameters/channelHandle'
2227 responses:
2228 '200':
2229 description: successful operation
2230 content:
2231 application/json:
2232 schema:
2233 type: object
2234 properties:
2235 avatar:
2236 $ref: '#/components/schemas/ActorImage'
2237 '413':
2238 description: image file too large
2239 headers:
2240 X-File-Maximum-Size:
2241 schema:
2242 type: string
2243 format: Nginx size
2244 description: Maximum file size for the avatar
2245 requestBody:
2246 content:
2247 multipart/form-data:
2248 schema:
2249 type: object
2250 properties:
2251 avatarfile:
2252 description: The file to upload.
2253 type: string
2254 format: binary
2255 encoding:
2256 avatarfile:
2257 contentType: image/png, image/jpeg
2258 '/video-channels/{channelHandle}/avatar':
2259 delete:
2260 summary: Delete channel avatar
2261 security:
2262 - OAuth2: []
2263 tags:
2264 - Video Channels
2265 parameters:
2266 - $ref: '#/components/parameters/channelHandle'
2267 responses:
2268 '204':
2269 description: successful operation
2270
2271
2272 '/video-channels/{channelHandle}/banner/pick':
2273 post:
2274 summary: Update channel banner
2275 security:
2276 - OAuth2: []
2277 tags:
2278 - Video Channels
2279 parameters:
2280 - $ref: '#/components/parameters/channelHandle'
2281 responses:
2282 '200':
2283 description: successful operation
2284 content:
2285 application/json:
2286 schema:
2287 type: object
2288 properties:
2289 banner:
2290 $ref: '#/components/schemas/ActorImage'
2291 '413':
2292 description: image file too large
2293 headers:
2294 X-File-Maximum-Size:
2295 schema:
2296 type: string
2297 format: Nginx size
2298 description: Maximum file size for the banner
2299 requestBody:
2300 content:
2301 multipart/form-data:
2302 schema:
2303 type: object
2304 properties:
2305 bannerfile:
2306 description: The file to upload.
2307 type: string
2308 format: binary
2309 encoding:
2310 bannerfile:
2311 contentType: image/png, image/jpeg
2312 '/video-channels/{channelHandle}/banner':
2313 delete:
2314 summary: Delete channel banner
2315 security:
2316 - OAuth2: []
2317 tags:
2318 - Video Channels
2319 parameters:
2320 - $ref: '#/components/parameters/channelHandle'
2321 responses:
2322 '204':
2323 description: successful operation
2324
2325 /video-playlists/privacies:
2326 get:
2327 summary: List available playlist privacies
2328 tags:
2329 - Video Playlists
2330 responses:
2331 '200':
2332 description: successful operation
2333 content:
2334 application/json:
2335 schema:
2336 type: array
2337 items:
2338 type: string
2339 examples:
2340 nightly:
2341 externalValue: https://peertube2.cpy.re/api/v1/video-playlists/privacies
2342
2343 /video-playlists:
2344 get:
2345 summary: List video playlists
2346 tags:
2347 - Video Playlists
2348 parameters:
2349 - $ref: '#/components/parameters/start'
2350 - $ref: '#/components/parameters/count'
2351 - $ref: '#/components/parameters/sort'
2352 responses:
2353 '200':
2354 description: successful operation
2355 content:
2356 application/json:
2357 schema:
2358 type: object
2359 properties:
2360 total:
2361 type: integer
2362 example: 1
2363 data:
2364 type: array
2365 items:
2366 $ref: '#/components/schemas/VideoPlaylist'
2367 post:
2368 summary: Create a video playlist
2369 description: 'If the video playlist is set as public, the videoChannelId is mandatory.'
2370 security:
2371 - OAuth2: []
2372 tags:
2373 - Video Playlists
2374 responses:
2375 '200':
2376 description: successful operation
2377 content:
2378 application/json:
2379 schema:
2380 type: object
2381 properties:
2382 videoPlaylist:
2383 type: object
2384 properties:
2385 id:
2386 type: integer
2387 uuid:
2388 type: string
2389 requestBody:
2390 content:
2391 multipart/form-data:
2392 schema:
2393 type: object
2394 properties:
2395 displayName:
2396 description: Video playlist display name
2397 type: string
2398 minLength: 1
2399 maxLength: 120
2400 thumbnailfile:
2401 description: Video playlist thumbnail file
2402 type: string
2403 format: binary
2404 privacy:
2405 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
2406 description:
2407 description: Video playlist description
2408 type: string
2409 videoChannelId:
2410 description: Video channel in which the playlist will be published
2411 type: integer
2412 required:
2413 - displayName
2414 encoding:
2415 thumbnailfile:
2416 contentType: image/jpeg
2417
2418 /video-playlists/{id}:
2419 get:
2420 summary: Get a video playlist
2421 tags:
2422 - Video Playlists
2423 parameters:
2424 - $ref: '#/components/parameters/idOrUUID'
2425 responses:
2426 '200':
2427 description: successful operation
2428 content:
2429 application/json:
2430 schema:
2431 $ref: '#/components/schemas/VideoPlaylist'
2432 put:
2433 summary: Update a video playlist
2434 description: 'If the video playlist is set as public, the playlist must have a assigned channel.'
2435 security:
2436 - OAuth2: []
2437 tags:
2438 - Video Playlists
2439 responses:
2440 '204':
2441 description: successful operation
2442 parameters:
2443 - $ref: '#/components/parameters/idOrUUID'
2444 requestBody:
2445 content:
2446 multipart/form-data:
2447 schema:
2448 type: object
2449 properties:
2450 displayName:
2451 description: Video playlist display name
2452 type: string
2453 minLength: 1
2454 maxLength: 120
2455 thumbnailfile:
2456 description: Video playlist thumbnail file
2457 type: string
2458 format: binary
2459 privacy:
2460 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
2461 description:
2462 description: Video playlist description
2463 type: string
2464 videoChannelId:
2465 description: Video channel in which the playlist will be published
2466 type: integer
2467 encoding:
2468 thumbnailfile:
2469 contentType: image/jpeg
2470 delete:
2471 summary: Delete a video playlist
2472 security:
2473 - OAuth2: []
2474 tags:
2475 - Video Playlists
2476 parameters:
2477 - $ref: '#/components/parameters/idOrUUID'
2478 responses:
2479 '204':
2480 description: successful operation
2481
2482 /video-playlists/{id}/videos:
2483 get:
2484 summary: 'List videos of a playlist'
2485 tags:
2486 - Videos
2487 - Video Playlists
2488 parameters:
2489 - $ref: '#/components/parameters/idOrUUID'
2490 responses:
2491 '200':
2492 description: successful operation
2493 content:
2494 application/json:
2495 schema:
2496 $ref: '#/components/schemas/VideoListResponse'
2497 post:
2498 summary: 'Add a video in a playlist'
2499 security:
2500 - OAuth2: []
2501 tags:
2502 - Videos
2503 - Video Playlists
2504 parameters:
2505 - $ref: '#/components/parameters/idOrUUID'
2506 responses:
2507 '200':
2508 description: successful operation
2509 content:
2510 application/json:
2511 schema:
2512 type: object
2513 properties:
2514 videoPlaylistElement:
2515 type: object
2516 properties:
2517 id:
2518 type: integer
2519 requestBody:
2520 content:
2521 application/json:
2522 schema:
2523 type: object
2524 properties:
2525 videoId:
2526 type: integer
2527 description: 'Video to add in the playlist'
2528 startTimestamp:
2529 type: integer
2530 description: 'Start the video at this specific timestamp (in seconds)'
2531 stopTimestamp:
2532 type: integer
2533 description: 'Stop the video at this specific timestamp (in seconds)'
2534 required:
2535 - videoId
2536
2537 /video-playlists/{id}/videos/reorder:
2538 post:
2539 summary: 'Reorder a playlist'
2540 security:
2541 - OAuth2: []
2542 tags:
2543 - Video Playlists
2544 parameters:
2545 - $ref: '#/components/parameters/idOrUUID'
2546 responses:
2547 '204':
2548 description: successful operation
2549 requestBody:
2550 content:
2551 application/json:
2552 schema:
2553 type: object
2554 properties:
2555 startPosition:
2556 type: integer
2557 description: 'Start position of the element to reorder'
2558 minimum: 1
2559 insertAfterPosition:
2560 type: integer
2561 description: 'New position for the block to reorder, to add the block before the first element'
2562 minimum: 0
2563 reorderLength:
2564 type: integer
2565 description: 'How many element from `startPosition` to reorder'
2566 minimum: 1
2567 required:
2568 - startPosition
2569 - insertAfterPosition
2570
2571 /video-playlists/{id}/videos/{playlistElementId}:
2572 put:
2573 summary: 'Update a playlist element'
2574 security:
2575 - OAuth2: []
2576 tags:
2577 - Video Playlists
2578 parameters:
2579 - $ref: '#/components/parameters/idOrUUID'
2580 - $ref: '#/components/parameters/playlistElementId'
2581 responses:
2582 '204':
2583 description: successful operation
2584 requestBody:
2585 content:
2586 application/json:
2587 schema:
2588 type: object
2589 properties:
2590 startTimestamp:
2591 type: integer
2592 description: 'Start the video at this specific timestamp (in seconds)'
2593 stopTimestamp:
2594 type: integer
2595 description: 'Stop the video at this specific timestamp (in seconds)'
2596 delete:
2597 summary: 'Delete an element from a playlist'
2598 security:
2599 - OAuth2: []
2600 tags:
2601 - Video Playlists
2602 parameters:
2603 - $ref: '#/components/parameters/idOrUUID'
2604 - $ref: '#/components/parameters/playlistElementId'
2605 responses:
2606 '204':
2607 description: successful operation
2608
2609 '/users/me/video-playlists/videos-exist':
2610 get:
2611 summary: 'Check video exists in my playlists'
2612 security:
2613 - OAuth2: []
2614 tags:
2615 - Video Playlists
2616 parameters:
2617 - name: videoIds
2618 in: query
2619 required: true
2620 description: The video ids to check
2621 schema:
2622 type: array
2623 items:
2624 type: integer
2625 responses:
2626 '200':
2627 description: successful operation
2628 content:
2629 application/json:
2630 schema:
2631 type: object
2632 properties:
2633 videoId:
2634 type: array
2635 items:
2636 type: object
2637 properties:
2638 playlistElementId:
2639 type: integer
2640 playlistId:
2641 type: integer
2642 startTimestamp:
2643 type: integer
2644 stopTimestamp:
2645 type: integer
2646
2647 '/accounts/{name}/video-channels':
2648 get:
2649 summary: List video channels of an account
2650 tags:
2651 - Video Channels
2652 - Accounts
2653 parameters:
2654 - $ref: '#/components/parameters/name'
2655 - name: withStats
2656 in: query
2657 description: include view statistics for the last 30 days (only if authentified as the account user)
2658 schema:
2659 type: boolean
2660 - $ref: '#/components/parameters/start'
2661 - $ref: '#/components/parameters/count'
2662 - $ref: '#/components/parameters/sort'
2663 responses:
2664 '200':
2665 description: successful operation
2666 content:
2667 application/json:
2668 schema:
2669 properties:
2670 total:
2671 type: integer
2672 example: 1
2673 data:
2674 type: array
2675 items:
2676 $ref: '#/components/schemas/VideoChannel'
2677 '/accounts/{name}/ratings':
2678 get:
2679 summary: List ratings of an account
2680 security:
2681 - OAuth2: []
2682 tags:
2683 - Accounts
2684 parameters:
2685 - $ref: '#/components/parameters/name'
2686 - $ref: '#/components/parameters/start'
2687 - $ref: '#/components/parameters/count'
2688 - $ref: '#/components/parameters/sort'
2689 - name: rating
2690 in: query
2691 required: false
2692 description: Optionally filter which ratings to retrieve
2693 schema:
2694 type: string
2695 enum:
2696 - like
2697 - dislike
2698 responses:
2699 '200':
2700 description: successful operation
2701 content:
2702 application/json:
2703 schema:
2704 type: array
2705 items:
2706 $ref: '#/components/schemas/VideoRating'
2707 '/videos/{id}/comment-threads':
2708 get:
2709 summary: List threads of a video
2710 tags:
2711 - Video Comments
2712 parameters:
2713 - $ref: '#/components/parameters/idOrUUID'
2714 - $ref: '#/components/parameters/start'
2715 - $ref: '#/components/parameters/count'
2716 - $ref: '#/components/parameters/commentsSort'
2717 responses:
2718 '200':
2719 description: successful operation
2720 content:
2721 application/json:
2722 schema:
2723 $ref: '#/components/schemas/CommentThreadResponse'
2724 post:
2725 summary: Create a thread
2726 security:
2727 - OAuth2: []
2728 tags:
2729 - Video Comments
2730 parameters:
2731 - $ref: '#/components/parameters/idOrUUID'
2732 responses:
2733 '200':
2734 description: successful operation
2735 content:
2736 application/json:
2737 schema:
2738 $ref: '#/components/schemas/CommentThreadPostResponse'
2739 '404':
2740 description: video does not exist
2741 requestBody:
2742 content:
2743 application/json:
2744 schema:
2745 type: object
2746 properties:
2747 text:
2748 type: string
2749 description: 'Text comment'
2750 required:
2751 - text
2752
2753 '/videos/{id}/comment-threads/{threadId}':
2754 get:
2755 summary: Get a thread
2756 tags:
2757 - Video Comments
2758 parameters:
2759 - $ref: '#/components/parameters/idOrUUID'
2760 - $ref: '#/components/parameters/threadId'
2761 responses:
2762 '200':
2763 description: successful operation
2764 content:
2765 application/json:
2766 schema:
2767 $ref: '#/components/schemas/VideoCommentThreadTree'
2768 '/videos/{id}/comments/{commentId}':
2769 post:
2770 summary: Reply to a thread of a video
2771 security:
2772 - OAuth2: []
2773 tags:
2774 - Video Comments
2775 parameters:
2776 - $ref: '#/components/parameters/idOrUUID'
2777 - $ref: '#/components/parameters/commentId'
2778 responses:
2779 '200':
2780 description: successful operation
2781 content:
2782 application/json:
2783 schema:
2784 $ref: '#/components/schemas/CommentThreadPostResponse'
2785 '404':
2786 description: thread or video does not exist
2787 requestBody:
2788 content:
2789 application/json:
2790 schema:
2791 type: object
2792 properties:
2793 text:
2794 type: string
2795 description: 'Text comment'
2796 required:
2797 - text
2798
2799 delete:
2800 summary: Delete a comment or a reply
2801 security:
2802 - OAuth2: []
2803 tags:
2804 - Video Comments
2805 parameters:
2806 - $ref: '#/components/parameters/idOrUUID'
2807 - $ref: '#/components/parameters/commentId'
2808 responses:
2809 '204':
2810 description: successful operation
2811 '403':
2812 description: cannot remove comment of another user
2813 '404':
2814 description: comment or video does not exist
2815 '409':
2816 description: comment is already deleted
2817 '/videos/{id}/rate':
2818 put:
2819 summary: Like/dislike a video
2820 security:
2821 - OAuth2: []
2822 tags:
2823 - Video Rates
2824 parameters:
2825 - $ref: '#/components/parameters/idOrUUID'
2826 responses:
2827 '204':
2828 description: successful operation
2829 '404':
2830 description: video does not exist
2831 /search/videos:
2832 get:
2833 tags:
2834 - Search
2835 summary: Search videos
2836 parameters:
2837 - name: search
2838 in: query
2839 required: true
2840 allowEmptyValue: false
2841 description: >
2842 String to search. If the user can make a remote URI search, and the string is an URI then the
2843 PeerTube instance will fetch the remote object and add it to its database. Then,
2844 you can use the REST API to fetch the complete video information and interact with it.
2845 schema:
2846 type: string
2847 - $ref: '#/components/parameters/categoryOneOf'
2848 - $ref: '#/components/parameters/isLive'
2849 - $ref: '#/components/parameters/tagsOneOf'
2850 - $ref: '#/components/parameters/tagsAllOf'
2851 - $ref: '#/components/parameters/licenceOneOf'
2852 - $ref: '#/components/parameters/languageOneOf'
2853 - $ref: '#/components/parameters/nsfw'
2854 - $ref: '#/components/parameters/filter'
2855 - $ref: '#/components/parameters/skipCount'
2856 - $ref: '#/components/parameters/start'
2857 - $ref: '#/components/parameters/count'
2858 - $ref: '#/components/parameters/searchTarget'
2859 - $ref: '#/components/parameters/videosSearchSort'
2860 - name: startDate
2861 in: query
2862 description: Get videos that are published after this date
2863 schema:
2864 type: string
2865 format: date-time
2866 - name: endDate
2867 in: query
2868 description: Get videos that are published before this date
2869 schema:
2870 type: string
2871 format: date-time
2872 - name: originallyPublishedStartDate
2873 in: query
2874 description: Get videos that are originally published after this date
2875 schema:
2876 type: string
2877 format: date-time
2878 - name: originallyPublishedEndDate
2879 in: query
2880 description: Get videos that are originally published before this date
2881 schema:
2882 type: string
2883 format: date-time
2884 - name: durationMin
2885 in: query
2886 description: Get videos that have this minimum duration
2887 schema:
2888 type: integer
2889 - name: durationMax
2890 in: query
2891 description: Get videos that have this maximum duration
2892 schema:
2893 type: integer
2894 callbacks:
2895 'searchTarget === search-index':
2896 $ref: '#/components/callbacks/searchIndex'
2897 responses:
2898 '200':
2899 description: successful operation
2900 content:
2901 application/json:
2902 schema:
2903 $ref: '#/components/schemas/VideoListResponse'
2904 '500':
2905 description: search index unavailable
2906 /search/video-channels:
2907 get:
2908 tags:
2909 - Search
2910 summary: Search channels
2911 parameters:
2912 - name: search
2913 in: query
2914 required: true
2915 description: >
2916 String to search. If the user can make a remote URI search, and the string is an URI then the
2917 PeerTube instance will fetch the remote object and add it to its database. Then,
2918 you can use the REST API to fetch the complete channel information and interact with it.
2919 schema:
2920 type: string
2921 - $ref: '#/components/parameters/start'
2922 - $ref: '#/components/parameters/count'
2923 - $ref: '#/components/parameters/searchTarget'
2924 - $ref: '#/components/parameters/sort'
2925 callbacks:
2926 'searchTarget === search-index':
2927 $ref: '#/components/callbacks/searchIndex'
2928 responses:
2929 '200':
2930 description: successful operation
2931 content:
2932 application/json:
2933 schema:
2934 type: array
2935 items:
2936 $ref: '#/components/schemas/VideoChannel'
2937 '500':
2938 description: search index unavailable
2939 /blocklist/accounts:
2940 get:
2941 tags:
2942 - Account Blocks
2943 summary: List account blocks
2944 security:
2945 - OAuth2:
2946 - admin
2947 parameters:
2948 - $ref: '#/components/parameters/start'
2949 - $ref: '#/components/parameters/count'
2950 - $ref: '#/components/parameters/sort'
2951 responses:
2952 '200':
2953 description: successful operation
2954 post:
2955 tags:
2956 - Account Blocks
2957 summary: Block an account
2958 security:
2959 - OAuth2:
2960 - admin
2961 requestBody:
2962 content:
2963 application/json:
2964 schema:
2965 type: object
2966 properties:
2967 accountName:
2968 type: string
2969 example: chocobozzz@example.org
2970 description: account to block, in the form `username@domain`
2971 required:
2972 - accountName
2973 responses:
2974 '200':
2975 description: successful operation
2976 '409':
2977 description: self-blocking forbidden
2978 '/blocklist/accounts/{accountName}':
2979 delete:
2980 tags:
2981 - Account Blocks
2982 summary: Unblock an account by its handle
2983 security:
2984 - OAuth2:
2985 - admin
2986 parameters:
2987 - name: accountName
2988 in: path
2989 required: true
2990 description: account to unblock, in the form `username@domain`
2991 schema:
2992 type: string
2993 responses:
2994 '201':
2995 description: successful operation
2996 '404':
2997 description: account or account block does not exist
2998 /blocklist/servers:
2999 get:
3000 tags:
3001 - Server Blocks
3002 summary: List server blocks
3003 security:
3004 - OAuth2:
3005 - admin
3006 parameters:
3007 - $ref: '#/components/parameters/start'
3008 - $ref: '#/components/parameters/count'
3009 - $ref: '#/components/parameters/sort'
3010 responses:
3011 '200':
3012 description: successful operation
3013 post:
3014 tags:
3015 - Server Blocks
3016 summary: Block a server
3017 security:
3018 - OAuth2:
3019 - admin
3020 requestBody:
3021 content:
3022 application/json:
3023 schema:
3024 type: object
3025 properties:
3026 host:
3027 type: string
3028 format: hostname
3029 description: server domain to block
3030 required:
3031 - host
3032 responses:
3033 '200':
3034 description: successful operation
3035 '409':
3036 description: self-blocking forbidden
3037 '/blocklist/servers/{host}':
3038 delete:
3039 tags:
3040 - Server Blocks
3041 summary: Unblock a server by its domain
3042 security:
3043 - OAuth2:
3044 - admin
3045 parameters:
3046 - name: host
3047 in: path
3048 required: true
3049 description: server domain to unblock
3050 schema:
3051 type: string
3052 format: hostname
3053 responses:
3054 '201':
3055 description: successful operation
3056 '404':
3057 description: account block does not exist
3058 /redundancy/{host}:
3059 put:
3060 tags:
3061 - Instance Redundancy
3062 summary: Update a server redundancy policy
3063 security:
3064 - OAuth2:
3065 - admin
3066 parameters:
3067 - name: host
3068 in: path
3069 required: true
3070 description: server domain to mirror
3071 schema:
3072 type: string
3073 format: hostname
3074 requestBody:
3075 content:
3076 application/json:
3077 schema:
3078 type: object
3079 properties:
3080 redundancyAllowed:
3081 type: boolean
3082 description: allow mirroring of the host's local videos
3083 required:
3084 - redundancyAllowed
3085 responses:
3086 '204':
3087 description: successful operation
3088 '404':
3089 description: server is not already known
3090 /redundancy/videos:
3091 get:
3092 tags:
3093 - Video Mirroring
3094 summary: List videos being mirrored
3095 security:
3096 - OAuth2:
3097 - admin
3098 parameters:
3099 - name: target
3100 in: query
3101 required: true
3102 description: direction of the mirror
3103 schema:
3104 type: string
3105 enum:
3106 - my-videos
3107 - remote-videos
3108 - $ref: '#/components/parameters/start'
3109 - $ref: '#/components/parameters/count'
3110 - $ref: '#/components/parameters/videoRedundanciesSort'
3111 responses:
3112 '200':
3113 description: successful operation
3114 content:
3115 application/json:
3116 schema:
3117 type: array
3118 items:
3119 $ref: '#/components/schemas/VideoRedundancy'
3120 post:
3121 tags:
3122 - Video Mirroring
3123 summary: Mirror a video
3124 security:
3125 - OAuth2:
3126 - admin
3127 requestBody:
3128 content:
3129 application/json:
3130 schema:
3131 type: object
3132 properties:
3133 videoId:
3134 type: integer
3135 required:
3136 - videoId
3137 responses:
3138 '204':
3139 description: successful operation
3140 '400':
3141 description: cannot mirror a local video
3142 '404':
3143 description: video does not exist
3144 '409':
3145 description: video is already mirrored
3146 /redundancy/videos/{redundancyId}:
3147 delete:
3148 tags:
3149 - Video Mirroring
3150 summary: Delete a mirror done on a video
3151 security:
3152 - OAuth2:
3153 - admin
3154 parameters:
3155 - name: redundancyId
3156 in: path
3157 required: true
3158 description: id of an existing redundancy on a video
3159 schema:
3160 type: string
3161 responses:
3162 '204':
3163 description: successful operation
3164 '404':
3165 description: video redundancy not found
3166 '/feeds/video-comments.{format}':
3167 get:
3168 tags:
3169 - Feeds
3170 summary: List comments on videos
3171 servers:
3172 - url: 'https://peertube2.cpy.re'
3173 description: Live Test Server (live data - latest nightly version)
3174 - url: 'https://peertube3.cpy.re'
3175 description: Live Test Server (live data - latest RC version)
3176 - url: 'https://peertube.cpy.re'
3177 description: Live Test Server (live data - stable version)
3178 parameters:
3179 - name: format
3180 in: path
3181 required: true
3182 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
3183 schema:
3184 type: string
3185 enum:
3186 - xml
3187 - rss
3188 - rss2
3189 - atom
3190 - atom1
3191 - json
3192 - json1
3193 - name: videoId
3194 in: query
3195 description: 'limit listing to a specific video'
3196 schema:
3197 type: string
3198 - name: accountId
3199 in: query
3200 description: 'limit listing to a specific account'
3201 schema:
3202 type: string
3203 - name: accountName
3204 in: query
3205 description: 'limit listing to a specific account'
3206 schema:
3207 type: string
3208 - name: videoChannelId
3209 in: query
3210 description: 'limit listing to a specific video channel'
3211 schema:
3212 type: string
3213 - name: videoChannelName
3214 in: query
3215 description: 'limit listing to a specific video channel'
3216 schema:
3217 type: string
3218 responses:
3219 '204':
3220 description: successful operation
3221 headers:
3222 Cache-Control:
3223 schema:
3224 type: string
3225 default: 'max-age=900' # 15 min cache
3226 content:
3227 application/xml:
3228 schema:
3229 $ref: '#/components/schemas/VideoCommentsForXML'
3230 application/rss+xml:
3231 schema:
3232 $ref: '#/components/schemas/VideoCommentsForXML'
3233 text/xml:
3234 schema:
3235 $ref: '#/components/schemas/VideoCommentsForXML'
3236 application/atom+xml:
3237 schema:
3238 $ref: '#/components/schemas/VideoCommentsForXML'
3239 application/json:
3240 schema:
3241 type: object
3242 '400':
3243 x-summary: field inconsistencies
3244 description: >
3245 Arises when:
3246 - videoId filter is mixed with a channel filter
3247 '404':
3248 description: video, video channel or account not found
3249 '406':
3250 description: accept header unsupported
3251 '/feeds/videos.{format}':
3252 get:
3253 tags:
3254 - Feeds
3255 summary: List videos
3256 servers:
3257 - url: 'https://peertube2.cpy.re'
3258 description: Live Test Server (live data - latest nightly version)
3259 - url: 'https://peertube3.cpy.re'
3260 description: Live Test Server (live data - latest RC version)
3261 - url: 'https://peertube.cpy.re'
3262 description: Live Test Server (live data - stable version)
3263 parameters:
3264 - name: format
3265 in: path
3266 required: true
3267 description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
3268 schema:
3269 type: string
3270 enum:
3271 - xml
3272 - rss
3273 - rss2
3274 - atom
3275 - atom1
3276 - json
3277 - json1
3278 - name: accountId
3279 in: query
3280 description: 'limit listing to a specific account'
3281 schema:
3282 type: string
3283 - name: accountName
3284 in: query
3285 description: 'limit listing to a specific account'
3286 schema:
3287 type: string
3288 - name: videoChannelId
3289 in: query
3290 description: 'limit listing to a specific video channel'
3291 schema:
3292 type: string
3293 - name: videoChannelName
3294 in: query
3295 description: 'limit listing to a specific video channel'
3296 schema:
3297 type: string
3298 - $ref: '#/components/parameters/sort'
3299 - $ref: '#/components/parameters/nsfw'
3300 - $ref: '#/components/parameters/filter'
3301 responses:
3302 '204':
3303 description: successful operation
3304 headers:
3305 Cache-Control:
3306 schema:
3307 type: string
3308 default: 'max-age=900' # 15 min cache
3309 content:
3310 application/xml:
3311 schema:
3312 $ref: '#/components/schemas/VideosForXML'
3313 examples:
3314 nightly:
3315 externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
3316 application/rss+xml:
3317 schema:
3318 $ref: '#/components/schemas/VideosForXML'
3319 text/xml:
3320 schema:
3321 $ref: '#/components/schemas/VideosForXML'
3322 application/atom+xml:
3323 schema:
3324 $ref: '#/components/schemas/VideosForXML'
3325 application/json:
3326 schema:
3327 type: object
3328 '404':
3329 description: video channel or account not found
3330 '406':
3331 description: accept header unsupported
3332 /plugins:
3333 get:
3334 tags:
3335 - Plugins
3336 summary: List plugins
3337 security:
3338 - OAuth2:
3339 - admin
3340 parameters:
3341 - name: pluginType
3342 in: query
3343 schema:
3344 type: integer
3345 - name: uninstalled
3346 in: query
3347 schema:
3348 type: boolean
3349 - $ref: '#/components/parameters/start'
3350 - $ref: '#/components/parameters/count'
3351 - $ref: '#/components/parameters/sort'
3352 responses:
3353 '200':
3354 description: successful operation
3355 content:
3356 application/json:
3357 schema:
3358 $ref: '#/components/schemas/PluginResponse'
3359 /plugins/available:
3360 get:
3361 tags:
3362 - Plugins
3363 summary: List available plugins
3364 security:
3365 - OAuth2:
3366 - admin
3367 parameters:
3368 - name: search
3369 in: query
3370 schema:
3371 type: string
3372 - name: pluginType
3373 in: query
3374 schema:
3375 type: integer
3376 - name: currentPeerTubeEngine
3377 in: query
3378 schema:
3379 type: string
3380 - $ref: '#/components/parameters/start'
3381 - $ref: '#/components/parameters/count'
3382 - $ref: '#/components/parameters/sort'
3383 responses:
3384 '200':
3385 description: successful operation
3386 content:
3387 application/json:
3388 schema:
3389 $ref: '#/components/schemas/PluginResponse'
3390 '503':
3391 description: plugin index unavailable
3392 /plugins/install:
3393 post:
3394 tags:
3395 - Plugins
3396 summary: Install a plugin
3397 security:
3398 - OAuth2:
3399 - admin
3400 requestBody:
3401 content:
3402 application/json:
3403 schema:
3404 oneOf:
3405 - type: object
3406 properties:
3407 npmName:
3408 type: string
3409 example: peertube-plugin-auth-ldap
3410 required:
3411 - npmName
3412 additionalProperties: false
3413 - type: object
3414 properties:
3415 path:
3416 type: string
3417 required:
3418 - path
3419 additionalProperties: false
3420 responses:
3421 '204':
3422 description: successful operation
3423 '400':
3424 description: should have either `npmName` or `path` set
3425 /plugins/update:
3426 post:
3427 tags:
3428 - Plugins
3429 summary: Update a plugin
3430 security:
3431 - OAuth2:
3432 - admin
3433 requestBody:
3434 content:
3435 application/json:
3436 schema:
3437 oneOf:
3438 - type: object
3439 properties:
3440 npmName:
3441 type: string
3442 example: peertube-plugin-auth-ldap
3443 required:
3444 - npmName
3445 additionalProperties: false
3446 - type: object
3447 properties:
3448 path:
3449 type: string
3450 required:
3451 - path
3452 additionalProperties: false
3453 responses:
3454 '204':
3455 description: successful operation
3456 '400':
3457 description: should have either `npmName` or `path` set
3458 '404':
3459 description: existing plugin not found
3460 /plugins/uninstall:
3461 post:
3462 tags:
3463 - Plugins
3464 summary: Uninstall a plugin
3465 security:
3466 - OAuth2:
3467 - admin
3468 requestBody:
3469 content:
3470 application/json:
3471 schema:
3472 type: object
3473 properties:
3474 npmName:
3475 type: string
3476 description: name of the plugin/theme in its package.json
3477 example: peertube-plugin-auth-ldap
3478 required:
3479 - npmName
3480 responses:
3481 '204':
3482 description: successful operation
3483 '404':
3484 description: existing plugin not found
3485 /plugins/{npmName}:
3486 get:
3487 tags:
3488 - Plugins
3489 summary: Get a plugin
3490 security:
3491 - OAuth2:
3492 - admin
3493 parameters:
3494 - $ref: '#/components/parameters/npmName'
3495 responses:
3496 '200':
3497 description: successful operation
3498 content:
3499 application/json:
3500 schema:
3501 $ref: '#/components/schemas/Plugin'
3502 '404':
3503 description: plugin not found
3504 /plugins/{npmName}/settings:
3505 put:
3506 tags:
3507 - Plugins
3508 summary: Set a plugin's settings
3509 security:
3510 - OAuth2:
3511 - admin
3512 parameters:
3513 - $ref: '#/components/parameters/npmName'
3514 requestBody:
3515 content:
3516 application/json:
3517 schema:
3518 type: object
3519 properties:
3520 settings:
3521 type: object
3522 additionalProperties: true
3523 responses:
3524 '204':
3525 description: successful operation
3526 '404':
3527 description: plugin not found
3528 /plugins/{npmName}/public-settings:
3529 get:
3530 tags:
3531 - Plugins
3532 summary: Get a plugin's public settings
3533 parameters:
3534 - $ref: '#/components/parameters/npmName'
3535 responses:
3536 '200':
3537 description: successful operation
3538 content:
3539 application/json:
3540 schema:
3541 type: object
3542 additionalProperties: true
3543 '404':
3544 description: plugin not found
3545 /plugins/{npmName}/registered-settings:
3546 get:
3547 tags:
3548 - Plugins
3549 summary: Get a plugin's registered settings
3550 security:
3551 - OAuth2:
3552 - admin
3553 parameters:
3554 - $ref: '#/components/parameters/npmName'
3555 responses:
3556 '200':
3557 description: successful operation
3558 content:
3559 application/json:
3560 schema:
3561 type: object
3562 additionalProperties: true
3563 '404':
3564 description: plugin not found
3565 servers:
3566 - url: 'https://peertube2.cpy.re/api/v1'
3567 description: Live Test Server (live data - latest nightly version)
3568 - url: 'https://peertube3.cpy.re/api/v1'
3569 description: Live Test Server (live data - latest RC version)
3570 - url: 'https://peertube.cpy.re/api/v1'
3571 description: Live Test Server (live data - stable version)
3572 components:
3573 parameters:
3574 start:
3575 name: start
3576 in: query
3577 required: false
3578 description: Offset used to paginate results
3579 schema:
3580 type: integer
3581 minimum: 0
3582 count:
3583 name: count
3584 in: query
3585 required: false
3586 description: "Number of items to return"
3587 schema:
3588 type: integer
3589 default: 15
3590 maximum: 100
3591 minimum: 1
3592 sort:
3593 name: sort
3594 in: query
3595 required: false
3596 description: Sort column
3597 schema:
3598 type: string
3599 example: -createdAt
3600 search:
3601 name: search
3602 in: query
3603 required: false
3604 description: Plain text search, applied to various parts of the model depending on endpoint
3605 schema:
3606 type: string
3607 searchTarget:
3608 name: searchTarget
3609 in: query
3610 required: false
3611 description: >
3612 If the administrator enabled search index support, you can override the default search target.
3613
3614
3615 **Warning**: If you choose to make an index search, PeerTube will get results from a third party service.
3616 It means the instance may not yet know the objects you fetched. If you want to load video/channel information:
3617 * If the current user has the ability to make a remote URI search (this information is available in the config endpoint),
3618 then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database.
3619 After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
3620 * 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
3621 the data from the origin instance API
3622 schema:
3623 type: string
3624 enum:
3625 - 'local'
3626 - 'search-index'
3627 videosSort:
3628 name: sort
3629 in: query
3630 required: false
3631 description: Sort videos by criteria
3632 schema:
3633 type: string
3634 enum:
3635 - name
3636 - -duration
3637 - -createdAt
3638 - -publishedAt
3639 - -views
3640 - -likes
3641 - -trending
3642 - -hot
3643 videosSearchSort:
3644 name: sort
3645 in: query
3646 required: false
3647 description: Sort videos by criteria
3648 schema:
3649 type: string
3650 enum:
3651 - name
3652 - -duration
3653 - -createdAt
3654 - -publishedAt
3655 - -views
3656 - -likes
3657 - -match
3658 commentsSort:
3659 name: sort
3660 in: query
3661 required: false
3662 description: Sort comments by criteria
3663 schema:
3664 type: string
3665 enum:
3666 - -createdAt
3667 - -totalReplies
3668 blacklistsSort:
3669 name: sort
3670 in: query
3671 required: false
3672 description: Sort blacklists by criteria
3673 schema:
3674 type: string
3675 enum:
3676 - -id
3677 - name
3678 - -duration
3679 - -views
3680 - -likes
3681 - -dislikes
3682 - -uuid
3683 - -createdAt
3684 usersSearch:
3685 name: search
3686 in: query
3687 required: false
3688 description: Plain text search that will match with user usernames or emails
3689 schema:
3690 type: string
3691 usersBlocked:
3692 name: blocked
3693 in: query
3694 required: false
3695 description: Filter results down to (un)banned users
3696 schema:
3697 type: boolean
3698 usersSort:
3699 name: sort
3700 in: query
3701 required: false
3702 description: Sort users by criteria
3703 schema:
3704 type: string
3705 enum:
3706 - -id
3707 - -username
3708 - -createdAt
3709 abusesSort:
3710 name: sort
3711 in: query
3712 required: false
3713 description: Sort abuses by criteria
3714 schema:
3715 type: string
3716 enum:
3717 - -id
3718 - -createdAt
3719 - -state
3720 videoRedundanciesSort:
3721 name: sort
3722 in: query
3723 required: false
3724 description: Sort abuses by criteria
3725 schema:
3726 type: string
3727 enum:
3728 - name
3729 name:
3730 name: name
3731 in: path
3732 required: true
3733 description: The username or handle of the account
3734 schema:
3735 type: string
3736 example: chocobozzz | chocobozzz@example.org
3737 id:
3738 name: id
3739 in: path
3740 required: true
3741 description: The user id
3742 schema:
3743 type: integer
3744 minimum: 0
3745 example: 42
3746 idOrUUID:
3747 name: id
3748 in: path
3749 required: true
3750 description: The object id or uuid
3751 schema:
3752 oneOf:
3753 - type: integer
3754 minimum: 0
3755 example: 42
3756 - type: string
3757 format: uuid
3758 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
3759 playlistElementId:
3760 name: playlistElementId
3761 in: path
3762 required: true
3763 description: Playlist element id
3764 schema:
3765 type: integer
3766 abuseId:
3767 name: abuseId
3768 in: path
3769 required: true
3770 description: Abuse id
3771 schema:
3772 type: integer
3773 abuseMessageId:
3774 name: abuseMessageId
3775 in: path
3776 required: true
3777 description: Abuse message id
3778 schema:
3779 type: integer
3780 captionLanguage:
3781 name: captionLanguage
3782 in: path
3783 required: true
3784 description: The caption language
3785 schema:
3786 type: string
3787 channelHandle:
3788 name: channelHandle
3789 in: path
3790 required: true
3791 description: The video channel handle
3792 schema:
3793 type: string
3794 example: my_username | my_username@example.com
3795 subscriptionHandle:
3796 name: subscriptionHandle
3797 in: path
3798 required: true
3799 description: The subscription handle
3800 schema:
3801 type: string
3802 example: my_username | my_username@example.com
3803 threadId:
3804 name: threadId
3805 in: path
3806 required: true
3807 description: The thread id (root comment id)
3808 schema:
3809 type: integer
3810 commentId:
3811 name: commentId
3812 in: path
3813 required: true
3814 description: The comment id
3815 schema:
3816 type: integer
3817 isLive:
3818 name: isLive
3819 in: query
3820 required: false
3821 description: whether or not the video is a live
3822 schema:
3823 type: boolean
3824 categoryOneOf:
3825 name: categoryOneOf
3826 in: query
3827 required: false
3828 description: category id of the video (see [/videos/categories](#tag/Video/paths/~1videos~1categories/get))
3829 schema:
3830 oneOf:
3831 - type: integer
3832 - type: array
3833 items:
3834 type: integer
3835 style: form
3836 explode: false
3837 tagsOneOf:
3838 name: tagsOneOf
3839 in: query
3840 required: false
3841 description: tag(s) of the video
3842 schema:
3843 oneOf:
3844 - type: string
3845 - type: array
3846 items:
3847 type: string
3848 style: form
3849 explode: false
3850 tagsAllOf:
3851 name: tagsAllOf
3852 in: query
3853 required: false
3854 description: tag(s) of the video, where all should be present in the video
3855 schema:
3856 oneOf:
3857 - type: string
3858 - type: array
3859 items:
3860 type: string
3861 style: form
3862 explode: false
3863 languageOneOf:
3864 name: languageOneOf
3865 in: query
3866 required: false
3867 description: language id of the video (see [/videos/languages](#tag/Video/paths/~1videos~1languages/get)). Use `_unknown` to filter on videos that don't have a video language
3868 schema:
3869 oneOf:
3870 - type: string
3871 - type: array
3872 items:
3873 type: string
3874 style: form
3875 explode: false
3876 licenceOneOf:
3877 name: licenceOneOf
3878 in: query
3879 required: false
3880 description: licence id of the video (see [/videos/licences](#tag/Video/paths/~1videos~1licences/get))
3881 schema:
3882 oneOf:
3883 - type: integer
3884 - type: array
3885 items:
3886 type: integer
3887 style: form
3888 explode: false
3889 skipCount:
3890 name: skipCount
3891 in: query
3892 required: false
3893 description: if you don't need the `total` in the response
3894 schema:
3895 type: string
3896 enum:
3897 - 'true'
3898 - 'false'
3899 default: 'false'
3900 nsfw:
3901 name: nsfw
3902 in: query
3903 required: false
3904 description: whether to include nsfw videos, if any
3905 schema:
3906 type: string
3907 enum:
3908 - 'true'
3909 - 'false'
3910 filter:
3911 name: filter
3912 in: query
3913 required: false
3914 description: >
3915 Special filters which might require special rights:
3916 * `local` - only videos local to the instance
3917 * `all-local` - only videos local to the instance, but showing private and unlisted videos (requires Admin privileges)
3918 * `all` - all videos, showing private and unlisted videos (requires Admin privileges)
3919 schema:
3920 type: string
3921 enum:
3922 - local
3923 - all-local
3924 subscriptionsUris:
3925 name: uris
3926 in: query
3927 required: true
3928 description: list of uris to check if each is part of the user subscriptions
3929 schema:
3930 type: array
3931 items:
3932 type: string
3933 format: uri
3934 npmName:
3935 name: npmName
3936 in: path
3937 required: true
3938 description: name of the plugin/theme on npmjs.com or in its package.json
3939 schema:
3940 type: string
3941 example: peertube-plugin-auth-ldap
3942 jobType:
3943 name: jobType
3944 in: query
3945 required: false
3946 description: job type
3947 schema:
3948 type: string
3949 enum:
3950 - activitypub-follow
3951 - activitypub-http-broadcast
3952 - activitypub-http-fetcher
3953 - activitypub-http-unicast
3954 - email
3955 - video-transcoding
3956 - video-file-import
3957 - video-import
3958 - videos-views
3959 - activitypub-refresher
3960 - video-redundancy
3961 - video-live-ending
3962 securitySchemes:
3963 OAuth2:
3964 description: >
3965 In the header: *Authorization: Bearer <token\>*
3966
3967
3968 Authenticating via OAuth requires the following steps:
3969
3970
3971 - Have an account with sufficient authorization levels
3972
3973 - [Generate](https://docs.joinpeertube.org/api-rest-getting-started) a
3974 Bearer Token
3975
3976 - Make Authenticated Requests
3977 type: oauth2
3978 flows:
3979 password:
3980 tokenUrl: 'https://peertube.example.com/api/v1/users/token'
3981 scopes:
3982 admin: Admin scope
3983 moderator: Moderator scope
3984 user: User scope
3985 schemas:
3986 VideoConstantNumber-Category:
3987 properties:
3988 id:
3989 type: integer
3990 description: category id of the video (see [/videos/categories](#tag/Video/paths/~1videos~1categories/get))
3991 label:
3992 type: string
3993 VideoConstantNumber-Licence:
3994 properties:
3995 id:
3996 type: integer
3997 description: licence id of the video (see [/videos/licences](#tag/Video/paths/~1videos~1licences/get))
3998 label:
3999 type: string
4000 VideoConstantString-Language:
4001 properties:
4002 id:
4003 type: string
4004 description: language id of the video (see [/videos/languages](#tag/Video/paths/~1videos~1languages/get))
4005 label:
4006 type: string
4007
4008 VideoPlaylistPrivacySet:
4009 type: integer
4010 enum:
4011 - 1
4012 - 2
4013 - 3
4014 description: 'The video playlist privacy (Public = `1`, Unlisted = `2`, Private = `3`)'
4015 VideoPlaylistPrivacyConstant:
4016 properties:
4017 id:
4018 $ref: '#/components/schemas/VideoPlaylistPrivacySet'
4019 label:
4020 type: string
4021
4022 VideoPlaylistTypeSet:
4023 type: integer
4024 enum:
4025 - 1
4026 - 2
4027 description: 'The video playlist type (Regular = `1`, Watch Later = `2`)'
4028 VideoPlaylistTypeConstant:
4029 properties:
4030 id:
4031 $ref: '#/components/schemas/VideoPlaylistTypeSet'
4032 label:
4033 type: string
4034
4035 VideoPrivacySet:
4036 type: integer
4037 enum:
4038 - 1
4039 - 2
4040 - 3
4041 - 4
4042 description: 'The video privacy (Public = `1`, Unlisted = `2`, Private = `3`, Internal = `4`)'
4043 VideoPrivacyConstant:
4044 properties:
4045 id:
4046 $ref: '#/components/schemas/VideoPrivacySet'
4047 label:
4048 type: string
4049
4050 NSFWPolicy:
4051 type: string
4052 enum:
4053 - display
4054 - blur
4055 - do_not_list
4056
4057 UserRole:
4058 type: integer
4059 enum:
4060 - 0
4061 - 1
4062 - 2
4063 description: 'The user role (Admin = `0`, Moderator = `1`, User = `2`)'
4064 example: 2
4065 UserAdminFlags:
4066 type: integer
4067 enum:
4068 - 0
4069 - 1
4070 description: 'Admin flags for the user (None = `0`, Bypass video blacklist = `1`)'
4071 example: 1
4072
4073 VideoStateConstant:
4074 properties:
4075 id:
4076 type: integer
4077 enum:
4078 - 1
4079 - 2
4080 - 3
4081 description: 'The video state (Published = `1`, to transcode = `2`, to import = `3`)'
4082 label:
4083 type: string
4084
4085 AbuseStateSet:
4086 type: integer
4087 enum:
4088 - 1
4089 - 2
4090 - 3
4091 description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
4092 AbuseStateConstant:
4093 properties:
4094 id:
4095 $ref: '#/components/schemas/AbuseStateSet'
4096 label:
4097 type: string
4098 AbusePredefinedReasons:
4099 type: array
4100 items:
4101 type: string
4102 enum:
4103 - violentOrAbusive
4104 - hatefulOrAbusive
4105 - spamOrMisleading
4106 - privacy
4107 - rights
4108 - serverRules
4109 - thumbnails
4110 - captions
4111 example: [spamOrMisleading]
4112
4113 VideoResolutionConstant:
4114 properties:
4115 id:
4116 type: integer
4117 description: 'Video resolution (240, 360, 720, 1080, 1440 or 2160)'
4118 example: 240
4119 label:
4120 type: string
4121 example: 240p
4122 VideoScheduledUpdate:
4123 properties:
4124 privacy:
4125 $ref: '#/components/schemas/VideoPrivacySet'
4126 updateAt:
4127 type: string
4128 format: date
4129 description: When to update the video
4130 required:
4131 - updateAt
4132 AccountSummary:
4133 properties:
4134 id:
4135 type: integer
4136 name:
4137 type: string
4138 displayName:
4139 type: string
4140 url:
4141 type: string
4142 format: url
4143 host:
4144 type: string
4145 format: hostname
4146 avatar:
4147 nullable: true
4148 allOf:
4149 - $ref: '#/components/schemas/ActorImage'
4150 VideoChannelSummary:
4151 properties:
4152 id:
4153 type: integer
4154 name:
4155 type: string
4156 displayName:
4157 type: string
4158 url:
4159 type: string
4160 format: url
4161 host:
4162 type: string
4163 format: hostname
4164 avatar:
4165 nullable: true
4166 allOf:
4167 - $ref: '#/components/schemas/ActorImage'
4168 PlaylistElement:
4169 properties:
4170 position:
4171 type: integer
4172 startTimestamp:
4173 type: integer
4174 stopTimestamp:
4175 type: integer
4176 video:
4177 nullable: true
4178 allOf:
4179 - $ref: '#/components/schemas/Video'
4180 VideoFile:
4181 properties:
4182 magnetUri:
4183 type: string
4184 resolution:
4185 $ref: '#/components/schemas/VideoResolutionConstant'
4186 size:
4187 type: integer
4188 description: 'Video file size in bytes'
4189 torrentUrl:
4190 type: string
4191 description: Direct URL of the torrent file
4192 format: url
4193 torrentDownloadUrl:
4194 type: string
4195 description: URL endpoint that transfers the torrent file as an attachment (so that the browser opens a download dialog)
4196 format: url
4197 fileUrl:
4198 type: string
4199 description: Direct URL of the video
4200 format: url
4201 fileDownloadUrl:
4202 type: string
4203 description: URL endpoint that transfers the video file as an attachment (so that the browser opens a download dialog)
4204 format: url
4205 fps:
4206 type: number
4207 metadataUrl:
4208 type: string
4209 format: url
4210 VideoStreamingPlaylists:
4211 properties:
4212 id:
4213 type: integer
4214 type:
4215 type: integer
4216 enum:
4217 - 1
4218 description: 'Playlist type (HLS = `1`)'
4219 playlistUrl:
4220 type: string
4221 format: url
4222 segmentsSha256Url:
4223 type: string
4224 format: url
4225 files:
4226 type: array
4227 description: |
4228 Video files associated to this playlist.
4229
4230 The difference with the root `files` property is that these files are fragmented, so they can be used in this streaming playlist (HLS, etc.)
4231 items:
4232 $ref: '#/components/schemas/VideoFile'
4233 redundancies:
4234 type: array
4235 items:
4236 type: object
4237 properties:
4238 baseUrl:
4239 type: string
4240 format: url
4241 VideoInfo:
4242 properties:
4243 id:
4244 type: integer
4245 uuid:
4246 type: string
4247 format: uuid
4248 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
4249 name:
4250 type: string
4251 minLength: 3
4252 maxLength: 120
4253 Video:
4254 properties:
4255 id:
4256 type: integer
4257 example: 8
4258 uuid:
4259 type: string
4260 format: uuid
4261 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
4262 isLive:
4263 type: boolean
4264 createdAt:
4265 type: string
4266 format: date-time
4267 publishedAt:
4268 type: string
4269 format: date-time
4270 updatedAt:
4271 type: string
4272 format: date-time
4273 originallyPublishedAt:
4274 type: string
4275 format: date-time
4276 category:
4277 $ref: '#/components/schemas/VideoConstantNumber-Category'
4278 licence:
4279 $ref: '#/components/schemas/VideoConstantNumber-Licence'
4280 language:
4281 $ref: '#/components/schemas/VideoConstantString-Language'
4282 privacy:
4283 $ref: '#/components/schemas/VideoPrivacyConstant'
4284 description:
4285 type: string
4286 duration:
4287 type: integer
4288 example: 1419
4289 isLocal:
4290 type: boolean
4291 name:
4292 type: string
4293 example: What is PeerTube?
4294 minLength: 3
4295 maxLength: 120
4296 thumbnailPath:
4297 type: string
4298 example: /static/thumbnails/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
4299 previewPath:
4300 type: string
4301 example: /lazy-static/previews/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
4302 embedPath:
4303 type: string
4304 example: /videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee
4305 views:
4306 type: integer
4307 example: 1337
4308 likes:
4309 type: integer
4310 example: 42
4311 dislikes:
4312 type: integer
4313 example: 7
4314 nsfw:
4315 type: boolean
4316 waitTranscoding:
4317 type: boolean
4318 nullable: true
4319 state:
4320 $ref: '#/components/schemas/VideoStateConstant'
4321 scheduledUpdate:
4322 nullable: true
4323 allOf:
4324 - $ref: '#/components/schemas/VideoScheduledUpdate'
4325 blacklisted:
4326 nullable: true
4327 type: boolean
4328 blacklistedReason:
4329 nullable: true
4330 type: string
4331 account:
4332 $ref: '#/components/schemas/AccountSummary'
4333 channel:
4334 $ref: '#/components/schemas/VideoChannelSummary'
4335 userHistory:
4336 nullable: true
4337 type: object
4338 properties:
4339 currentTime:
4340 type: integer
4341 VideoDetails:
4342 allOf:
4343 - $ref: '#/components/schemas/Video'
4344 - type: object
4345 properties:
4346 descriptionPath:
4347 type: string
4348 support:
4349 type: string
4350 description: A text tell the audience how to support the video creator
4351 example: Please support my work on <insert crowdfunding plateform>! <3
4352 minLength: 3
4353 maxLength: 1000
4354 channel:
4355 $ref: '#/components/schemas/VideoChannel'
4356 account:
4357 $ref: '#/components/schemas/Account'
4358 tags:
4359 example: [flowers, gardening]
4360 type: array
4361 minItems: 1
4362 maxItems: 5
4363 items:
4364 type: string
4365 minLength: 2
4366 maxLength: 30
4367 commentsEnabled:
4368 type: boolean
4369 downloadEnabled:
4370 type: boolean
4371 trackerUrls:
4372 type: array
4373 items:
4374 type: string
4375 format: url
4376 files:
4377 type: array
4378 items:
4379 $ref: '#/components/schemas/VideoFile'
4380 description: |
4381 WebTorrent/raw video files. If WebTorrent is disabled on the server:
4382
4383 - field will be empty
4384 - video files will be found in `streamingPlaylists[].files` field
4385 streamingPlaylists:
4386 type: array
4387 items:
4388 $ref: '#/components/schemas/VideoStreamingPlaylists'
4389 description: |
4390 HLS playlists/manifest files. If HLS is disabled on the server:
4391
4392 - field will be empty
4393 - video files will be found in `files` field
4394 FileRedundancyInformation:
4395 properties:
4396 id:
4397 type: integer
4398 fileUrl:
4399 type: string
4400 format: url
4401 strategy:
4402 type: string
4403 enum:
4404 - manual
4405 - most-views
4406 - trending
4407 - recently-added
4408 size:
4409 type: integer
4410 createdAt:
4411 type: string
4412 format: date-time
4413 updatedAt:
4414 type: string
4415 format: date-time
4416 expiresOn:
4417 type: string
4418 format: date-time
4419 VideoRedundancy:
4420 properties:
4421 id:
4422 type: integer
4423 name:
4424 type: string
4425 url:
4426 type: string
4427 format: url
4428 uuid:
4429 type: string
4430 format: uuid
4431 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
4432 redundancies:
4433 type: object
4434 properties:
4435 files:
4436 type: array
4437 items:
4438 $ref: '#/components/schemas/FileRedundancyInformation'
4439 streamingPlaylists:
4440 type: array
4441 items:
4442 $ref: '#/components/schemas/FileRedundancyInformation'
4443 VideoImportStateConstant:
4444 properties:
4445 id:
4446 type: integer
4447 enum:
4448 - 1
4449 - 2
4450 - 3
4451 description: 'The video import state (Pending = `1`, Success = `2`, Failed = `3`)'
4452 label:
4453 type: string
4454 example: Pending
4455 VideoImport:
4456 properties:
4457 id:
4458 type: integer
4459 example: 2
4460 targetUrl:
4461 type: string
4462 format: url
4463 example: https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d
4464 magnetUri:
4465 type: string
4466 format: uri
4467 example: magnet:?xs=https%3A%2F%2Fframatube.org%2Fstatic%2Ftorrents%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.torrent&xt=urn:btih:38b4747ff788b30bf61f59d1965cd38f9e48e01f&dn=What+is+PeerTube%3F&tr=wss%3A%2F%2Fframatube.org%2Ftracker%2Fsocket&tr=https%3A%2F%2Fframatube.org%2Ftracker%2Fannounce&ws=https%3A%2F%2Fframatube.org%2Fstatic%2Fwebseed%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.mp4
4468 torrentName:
4469 type: string
4470 state:
4471 $ref: '#/components/schemas/VideoImportStateConstant'
4472 error:
4473 type: string
4474 createdAt:
4475 type: string
4476 format: date-time
4477 updatedAt:
4478 type: string
4479 format: date-time
4480 video:
4481 $ref: '#/components/schemas/Video'
4482 Abuse:
4483 properties:
4484 id:
4485 type: integer
4486 example: 7
4487 reason:
4488 type: string
4489 example: The video is a spam
4490 minLength: 2
4491 maxLength: 3000
4492 predefinedReasons:
4493 $ref: '#/components/schemas/AbusePredefinedReasons'
4494 reporterAccount:
4495 $ref: '#/components/schemas/Account'
4496 state:
4497 $ref: '#/components/schemas/AbuseStateConstant'
4498 moderationComment:
4499 type: string
4500 example: Decided to ban the server since it spams us regularly
4501 minLength: 2
4502 maxLength: 3000
4503 video:
4504 $ref: '#/components/schemas/VideoInfo'
4505 createdAt:
4506 type: string
4507 format: date-time
4508 AbuseMessage:
4509 properties:
4510 id:
4511 type: integer
4512 message:
4513 type: string
4514 minLength: 2
4515 maxLength: 3000
4516 byModerator:
4517 type: boolean
4518 createdAt:
4519 type: string
4520 format: date-time
4521 account:
4522 $ref: '#/components/schemas/AccountSummary'
4523 VideoBlacklist:
4524 properties:
4525 id:
4526 type: integer
4527 videoId:
4528 type: integer
4529 createdAt:
4530 type: string
4531 format: date-time
4532 updatedAt:
4533 type: string
4534 format: date-time
4535 name:
4536 type: string
4537 minLength: 3
4538 maxLength: 120
4539 uuid:
4540 type: string
4541 format: uuid
4542 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
4543 description:
4544 type: string
4545 minLength: 3
4546 maxLength: 10000
4547 duration:
4548 type: integer
4549 views:
4550 type: integer
4551 likes:
4552 type: integer
4553 dislikes:
4554 type: integer
4555 nsfw:
4556 type: boolean
4557 VideoChannel:
4558 properties:
4559 displayName:
4560 type: string
4561 minLength: 1
4562 maxLength: 120
4563 description:
4564 type: string
4565 minLength: 3
4566 maxLength: 1000
4567 isLocal:
4568 type: boolean
4569 ownerAccount:
4570 type: object
4571 properties:
4572 id:
4573 type: integer
4574 uuid:
4575 type: string
4576 format: uuid
4577 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
4578 VideoPlaylist:
4579 properties:
4580 id:
4581 type: integer
4582 createdAt:
4583 type: string
4584 format: date-time
4585 updatedAt:
4586 type: string
4587 format: date-time
4588 description:
4589 type: string
4590 minLength: 3
4591 maxLength: 1000
4592 uuid:
4593 type: string
4594 format: uuid
4595 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
4596 displayName:
4597 type: string
4598 minLength: 1
4599 maxLength: 120
4600 isLocal:
4601 type: boolean
4602 videoLength:
4603 type: integer
4604 thumbnailPath:
4605 type: string
4606 privacy:
4607 $ref: '#/components/schemas/VideoPlaylistPrivacyConstant'
4608 type:
4609 $ref: '#/components/schemas/VideoPlaylistTypeConstant'
4610 ownerAccount:
4611 $ref: '#/components/schemas/AccountSummary'
4612 videoChannel:
4613 $ref: '#/components/schemas/VideoChannelSummary'
4614 VideoComment:
4615 properties:
4616 id:
4617 type: integer
4618 url:
4619 type: string
4620 format: url
4621 text:
4622 type: string
4623 minLength: 1
4624 maxLength: 10000
4625 threadId:
4626 type: integer
4627 inReplyToCommentId:
4628 type: integer
4629 videoId:
4630 type: integer
4631 createdAt:
4632 type: string
4633 format: date-time
4634 updatedAt:
4635 type: string
4636 format: date-time
4637 totalRepliesFromVideoAuthor:
4638 type: integer
4639 totalReplies:
4640 type: integer
4641 account:
4642 $ref: '#/components/schemas/Account'
4643 VideoCommentThreadTree:
4644 properties:
4645 comment:
4646 $ref: '#/components/schemas/VideoComment'
4647 children:
4648 type: array
4649 items:
4650 $ref: '#/components/schemas/VideoCommentThreadTree'
4651 VideoCaption:
4652 properties:
4653 language:
4654 $ref: '#/components/schemas/VideoConstantString-Language'
4655 captionPath:
4656 type: string
4657 ActorImage:
4658 properties:
4659 path:
4660 type: string
4661 createdAt:
4662 type: string
4663 format: date-time
4664 updatedAt:
4665 type: string
4666 format: date-time
4667 ActorInfo:
4668 properties:
4669 id:
4670 type: integer
4671 example: 11
4672 name:
4673 type: string
4674 displayName:
4675 type: string
4676 host:
4677 type: string
4678 format: hostname
4679 avatar:
4680 nullable: true
4681 type: object
4682 properties:
4683 path:
4684 type: string
4685 Actor:
4686 properties:
4687 id:
4688 type: integer
4689 example: 11
4690 url:
4691 type: string
4692 format: url
4693 name:
4694 type: string
4695 host:
4696 type: string
4697 format: hostname
4698 followingCount:
4699 type: integer
4700 followersCount:
4701 type: integer
4702 createdAt:
4703 type: string
4704 format: date-time
4705 updatedAt:
4706 type: string
4707 format: date-time
4708 avatar:
4709 $ref: '#/components/schemas/ActorImage'
4710 Account:
4711 allOf:
4712 - $ref: '#/components/schemas/Actor'
4713 - properties:
4714 userId:
4715 type: string
4716 example: 2
4717 displayName:
4718 type: string
4719 description:
4720 type: string
4721 UserWatchingVideo:
4722 properties:
4723 currentTime:
4724 type: integer
4725 description: timestamp within the video, in seconds
4726 example: 5
4727 ServerConfig:
4728 properties:
4729 instance:
4730 type: object
4731 properties:
4732 name:
4733 type: string
4734 shortDescription:
4735 type: string
4736 defaultClientRoute:
4737 type: string
4738 isNSFW:
4739 type: boolean
4740 defaultNSFWPolicy:
4741 type: string
4742 customizations:
4743 type: object
4744 properties:
4745 javascript:
4746 type: string
4747 css:
4748 type: string
4749 search:
4750 type: object
4751 properties:
4752 remoteUri:
4753 type: object
4754 properties:
4755 users:
4756 type: boolean
4757 anonymous:
4758 type: boolean
4759 plugin:
4760 type: object
4761 properties:
4762 registered:
4763 type: array
4764 items:
4765 type: string
4766 theme:
4767 type: object
4768 properties:
4769 registered:
4770 type: array
4771 items:
4772 type: string
4773 email:
4774 type: object
4775 properties:
4776 enabled:
4777 type: boolean
4778 contactForm:
4779 type: object
4780 properties:
4781 enabled:
4782 type: boolean
4783 serverVersion:
4784 type: string
4785 serverCommit:
4786 type: string
4787 signup:
4788 type: object
4789 properties:
4790 allowed:
4791 type: boolean
4792 allowedForCurrentIP:
4793 type: boolean
4794 requiresEmailVerification:
4795 type: boolean
4796 transcoding:
4797 type: object
4798 properties:
4799 hls:
4800 type: object
4801 properties:
4802 enabled:
4803 type: boolean
4804 webtorrent:
4805 type: object
4806 properties:
4807 enabled:
4808 type: boolean
4809 enabledResolutions:
4810 type: array
4811 items:
4812 type: integer
4813 import:
4814 type: object
4815 properties:
4816 videos:
4817 type: object
4818 properties:
4819 http:
4820 type: object
4821 properties:
4822 enabled:
4823 type: boolean
4824 torrent:
4825 type: object
4826 properties:
4827 enabled:
4828 type: boolean
4829 autoBlacklist:
4830 type: object
4831 properties:
4832 videos:
4833 type: object
4834 properties:
4835 ofUsers:
4836 type: object
4837 properties:
4838 enabled:
4839 type: boolean
4840 avatar:
4841 type: object
4842 properties:
4843 file:
4844 type: object
4845 properties:
4846 size:
4847 type: object
4848 properties:
4849 max:
4850 type: integer
4851 extensions:
4852 type: array
4853 items:
4854 type: string
4855 video:
4856 type: object
4857 properties:
4858 image:
4859 type: object
4860 properties:
4861 extensions:
4862 type: array
4863 items:
4864 type: string
4865 size:
4866 type: object
4867 properties:
4868 max:
4869 type: integer
4870 file:
4871 type: object
4872 properties:
4873 extensions:
4874 type: array
4875 items:
4876 type: string
4877 videoCaption:
4878 type: object
4879 properties:
4880 file:
4881 type: object
4882 properties:
4883 size:
4884 type: object
4885 properties:
4886 max:
4887 type: integer
4888 extensions:
4889 type: array
4890 items:
4891 type: string
4892 user:
4893 type: object
4894 properties:
4895 videoQuota:
4896 type: integer
4897 videoQuotaDaily:
4898 type: integer
4899 trending:
4900 type: object
4901 properties:
4902 videos:
4903 type: object
4904 properties:
4905 intervalDays:
4906 type: integer
4907 tracker:
4908 type: object
4909 properties:
4910 enabled:
4911 type: boolean
4912 followings:
4913 type: object
4914 properties:
4915 instance:
4916 type: object
4917 properties:
4918 autoFollowIndex:
4919 type: object
4920 properties:
4921 indexUrl:
4922 type: string
4923 format: url
4924 ServerConfigAbout:
4925 properties:
4926 instance:
4927 type: object
4928 properties:
4929 name:
4930 type: string
4931 shortDescription:
4932 type: string
4933 description:
4934 type: string
4935 terms:
4936 type: string
4937 ServerConfigCustom:
4938 properties:
4939 instance:
4940 type: object
4941 properties:
4942 name:
4943 type: string
4944 shortDescription:
4945 type: string
4946 description:
4947 type: string
4948 terms:
4949 type: string
4950 defaultClientRoute:
4951 type: string
4952 isNSFW:
4953 type: boolean
4954 defaultNSFWPolicy:
4955 type: string
4956 customizations:
4957 type: object
4958 properties:
4959 javascript:
4960 type: string
4961 css:
4962 type: string
4963 theme:
4964 type: object
4965 properties:
4966 default:
4967 type: string
4968 services:
4969 type: object
4970 properties:
4971 twitter:
4972 type: object
4973 properties:
4974 username:
4975 type: string
4976 whitelisted:
4977 type: boolean
4978 cache:
4979 type: object
4980 properties:
4981 previews:
4982 type: object
4983 properties:
4984 size:
4985 type: integer
4986 captions:
4987 type: object
4988 properties:
4989 size:
4990 type: integer
4991 signup:
4992 type: object
4993 properties:
4994 enabled:
4995 type: boolean
4996 limit:
4997 type: integer
4998 requiresEmailVerification:
4999 type: boolean
5000 admin:
5001 type: object
5002 properties:
5003 email:
5004 type: string
5005 format: email
5006 contactForm:
5007 type: object
5008 properties:
5009 enabled:
5010 type: boolean
5011 user:
5012 type: object
5013 properties:
5014 videoQuota:
5015 type: integer
5016 videoQuotaDaily:
5017 type: integer
5018 transcoding:
5019 type: object
5020 properties:
5021 enabled:
5022 type: boolean
5023 allowAdditionalExtensions:
5024 type: boolean
5025 allowAudioFiles:
5026 type: boolean
5027 threads:
5028 type: integer
5029 resolutions:
5030 type: object
5031 properties:
5032 240p:
5033 type: boolean
5034 360p:
5035 type: boolean
5036 480p:
5037 type: boolean
5038 720p:
5039 type: boolean
5040 1080p:
5041 type: boolean
5042 1440p:
5043 type: boolean
5044 2160p:
5045 type: boolean
5046 hls:
5047 type: object
5048 properties:
5049 enabled:
5050 type: boolean
5051 import:
5052 type: object
5053 properties:
5054 videos:
5055 type: object
5056 properties:
5057 http:
5058 type: object
5059 properties:
5060 enabled:
5061 type: boolean
5062 torrent:
5063 type: object
5064 properties:
5065 enabled:
5066 type: boolean
5067 autoBlacklist:
5068 type: object
5069 properties:
5070 videos:
5071 type: object
5072 properties:
5073 ofUsers:
5074 type: object
5075 properties:
5076 enabled:
5077 type: boolean
5078 followers:
5079 type: object
5080 properties:
5081 instance:
5082 type: object
5083 properties:
5084 enabled:
5085 type: boolean
5086 manualApproval:
5087 type: boolean
5088 Follow:
5089 properties:
5090 id:
5091 type: integer
5092 follower:
5093 $ref: '#/components/schemas/Actor'
5094 following:
5095 $ref: '#/components/schemas/Actor'
5096 score:
5097 type: number
5098 description: score reflecting the reachability of the actor, with steps of `10` and a base score of `1000`.
5099 state:
5100 type: string
5101 enum:
5102 - pending
5103 - accepted
5104 createdAt:
5105 type: string
5106 format: date-time
5107 updatedAt:
5108 type: string
5109 format: date-time
5110
5111 PredefinedAbuseReasons:
5112 description: Reason categories that help triage reports
5113 type: array
5114 items:
5115 type: string
5116 enum:
5117 - violentOrAbusive
5118 - hatefulOrAbusive
5119 - spamOrMisleading
5120 - privacy
5121 - rights
5122 - serverRules
5123 - thumbnails
5124 - captions
5125
5126 Job:
5127 properties:
5128 id:
5129 type: integer
5130 minimum: 0
5131 example: 42
5132 state:
5133 type: string
5134 enum:
5135 - active
5136 - completed
5137 - failed
5138 - waiting
5139 - delayed
5140 type:
5141 type: string
5142 enum:
5143 - activitypub-http-unicast
5144 - activitypub-http-broadcast
5145 - activitypub-http-fetcher
5146 - activitypub-follow
5147 - video-file-import
5148 - video-transcoding
5149 - email
5150 - video-import
5151 - videos-views
5152 - activitypub-refresher
5153 - video-redundancy
5154 data:
5155 type: object
5156 additionalProperties: true
5157 error:
5158 type: object
5159 additionalProperties: true
5160 createdAt:
5161 type: string
5162 format: date-time
5163 finishedOn:
5164 type: string
5165 format: date-time
5166 processedOn:
5167 type: string
5168 format: date-time
5169 AddUserResponse:
5170 properties:
5171 user:
5172 type: object
5173 properties:
5174 id:
5175 type: integer
5176 example: 8
5177 account:
5178 type: object
5179 properties:
5180 id:
5181 type: integer
5182 example: 37
5183 VideoUploadResponse:
5184 properties:
5185 video:
5186 type: object
5187 properties:
5188 id:
5189 type: integer
5190 example: 8
5191 uuid:
5192 type: string
5193 format: uuid
5194 example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
5195 CommentThreadResponse:
5196 properties:
5197 total:
5198 type: integer
5199 example: 1
5200 data:
5201 type: array
5202 maxItems: 100
5203 items:
5204 $ref: '#/components/schemas/VideoComment'
5205 CommentThreadPostResponse:
5206 properties:
5207 comment:
5208 $ref: '#/components/schemas/VideoComment'
5209 VideoListResponse:
5210 properties:
5211 total:
5212 type: integer
5213 example: 1
5214 data:
5215 type: array
5216 maxItems: 100
5217 items:
5218 $ref: '#/components/schemas/Video'
5219 User:
5220 properties:
5221 id:
5222 type: integer
5223 readOnly: true
5224 username:
5225 type: string
5226 description: The user username
5227 minLength: 1
5228 maxLength: 50
5229 email:
5230 type: string
5231 format: email
5232 description: The user email
5233 pluginAuth:
5234 type: string
5235 description: Auth plugin to use to authenticate the user
5236 theme:
5237 type: string
5238 description: Theme enabled by this user
5239 emailVerified:
5240 type: boolean
5241 description: Has the user confirmed their email address?
5242 nsfwPolicy:
5243 $ref: '#/components/schemas/NSFWPolicy'
5244 webtorrentEnabled:
5245 type: boolean
5246 description: Enable P2P in the player
5247 autoPlayVideo:
5248 type: boolean
5249 description: Automatically start playing the video on the watch page
5250 role:
5251 $ref: '#/components/schemas/UserRole'
5252 roleLabel:
5253 type: string
5254 enum:
5255 - User
5256 - Moderator
5257 - Administrator
5258 videoQuota:
5259 type: integer
5260 description: The user video quota
5261 videoQuotaDaily:
5262 type: integer
5263 description: The user daily video quota
5264 videosCount:
5265 type: integer
5266 abusesCount:
5267 type: integer
5268 abusesAcceptedCount:
5269 type: integer
5270 abusesCreatedCount:
5271 type: integer
5272 videoCommentsCount:
5273 type: integer
5274 noInstanceConfigWarningModal:
5275 type: boolean
5276 noWelcomeModal:
5277 type: boolean
5278 blocked:
5279 type: boolean
5280 blockedReason:
5281 type: string
5282 createdAt:
5283 type: string
5284 account:
5285 $ref: '#/components/schemas/Account'
5286 videoChannels:
5287 type: array
5288 items:
5289 $ref: '#/components/schemas/VideoChannel'
5290 AddUser:
5291 properties:
5292 username:
5293 type: string
5294 description: The user username
5295 minLength: 1
5296 maxLength: 50
5297 password:
5298 type: string
5299 format: password
5300 description: The user password. If the smtp server is configured, you can leave empty and an email will be sent
5301 minLength: 6
5302 maxLength: 255
5303 email:
5304 type: string
5305 format: email
5306 description: The user email
5307 videoQuota:
5308 type: integer
5309 description: The user video quota
5310 videoQuotaDaily:
5311 type: integer
5312 description: The user daily video quota
5313 channelName:
5314 type: string
5315 description: The user default channel username
5316 role:
5317 $ref: '#/components/schemas/UserRole'
5318 adminFlags:
5319 $ref: '#/components/schemas/UserAdminFlags'
5320 required:
5321 - username
5322 - password
5323 - email
5324 - videoQuota
5325 - videoQuotaDaily
5326 - role
5327 UpdateUser:
5328 properties:
5329 id:
5330 type: string
5331 description: The user id
5332 email:
5333 type: string
5334 format: email
5335 description: The updated email of the user
5336 emailVerified:
5337 type: boolean
5338 description: Set the email as verified
5339 videoQuota:
5340 type: integer
5341 description: The updated video quota of the user
5342 videoQuotaDaily:
5343 type: integer
5344 description: The updated daily video quota of the user
5345 pluginAuth:
5346 type: string
5347 nullable: true
5348 description: The auth plugin to use to authenticate the user
5349 example: 'peertube-plugin-auth-saml2'
5350 role:
5351 $ref: '#/components/schemas/UserRole'
5352 adminFlags:
5353 $ref: '#/components/schemas/UserAdminFlags'
5354 required:
5355 - id
5356 UpdateMe:
5357 properties:
5358 password:
5359 type: string
5360 format: password
5361 description: Your new password
5362 minLength: 6
5363 maxLength: 255
5364 email:
5365 type: string
5366 format: email
5367 description: Your new email
5368 displayNSFW:
5369 type: string
5370 description: Your new displayNSFW
5371 enum:
5372 - 'true'
5373 - 'false'
5374 - both
5375 autoPlayVideo:
5376 type: boolean
5377 description: Your new autoPlayVideo
5378 required:
5379 - password
5380 - email
5381 - displayNSFW
5382 - autoPlayVideo
5383 GetMeVideoRating:
5384 properties:
5385 id:
5386 type: string
5387 description: Id of the video
5388 rating:
5389 type: number
5390 description: Rating of the video
5391 required:
5392 - id
5393 - rating
5394 VideoRating:
5395 properties:
5396 video:
5397 $ref: '#/components/schemas/Video'
5398 rating:
5399 type: number
5400 description: 'Rating of the video'
5401 required:
5402 - video
5403 - rating
5404 RegisterUser:
5405 properties:
5406 username:
5407 type: string
5408 description: The username of the user
5409 minLength: 1
5410 maxLength: 50
5411 pattern: '/^[a-z0-9._]{1,50}$/'
5412 password:
5413 type: string
5414 format: password
5415 description: The password of the user
5416 minLength: 6
5417 maxLength: 255
5418 email:
5419 type: string
5420 format: email
5421 description: The email of the user
5422 displayName:
5423 type: string
5424 description: The user display name
5425 minLength: 1
5426 maxLength: 120
5427 channel:
5428 type: object
5429 properties:
5430 name:
5431 type: string
5432 description: The username for the default channel
5433 pattern: '/^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\-_.:]+$/'
5434 displayName:
5435 type: string
5436 description: The display name for the default channel
5437 minLength: 1
5438 maxLength: 120
5439 required:
5440 - username
5441 - password
5442 - email
5443
5444 VideoChannelCommon:
5445 properties:
5446 displayName:
5447 type: string
5448 minLength: 1
5449 maxLength: 120
5450 description:
5451 type: string
5452 minLength: 3
5453 maxLength: 1000
5454 support:
5455 type: string
5456 description: 'A text shown by default on all videos of this channel, to tell the audience how to support it'
5457 example: Please support my work on <insert crowdfunding plateform>! <3
5458 minLength: 3
5459 maxLength: 1000
5460 VideoChannelCreate:
5461 allOf:
5462 - $ref: '#/components/schemas/VideoChannelCommon'
5463 - properties:
5464 name:
5465 type: string
5466 minLength: 1
5467 maxLength: 120
5468 required:
5469 - name
5470 - displayName
5471 VideoChannelUpdate:
5472 allOf:
5473 - $ref: '#/components/schemas/VideoChannelCommon'
5474 - properties:
5475 bulkVideosSupportUpdate:
5476 type: boolean
5477 description: 'Update the support field for all videos of this channel'
5478
5479 MRSSPeerLink:
5480 type: object
5481 xml:
5482 name: 'media:peerLink'
5483 properties:
5484 href:
5485 type: string
5486 xml:
5487 attribute: true
5488 type:
5489 type: string
5490 enum:
5491 - application/x-bittorrent
5492 xml:
5493 attribute: true
5494 MRSSGroupContent:
5495 type: object
5496 xml:
5497 name: 'media:content'
5498 properties:
5499 url:
5500 type: string
5501 format: url
5502 xml:
5503 attribute: true
5504 fileSize:
5505 type: integer
5506 xml:
5507 attribute: true
5508 type:
5509 type: string
5510 xml:
5511 attribute: true
5512 framerate:
5513 type: integer
5514 xml:
5515 attribute: true
5516 duration:
5517 type: integer
5518 xml:
5519 attribute: true
5520 height:
5521 type: integer
5522 xml:
5523 attribute: true
5524 lang:
5525 type: string
5526 xml:
5527 attribute: true
5528 VideoCommentsForXML:
5529 type: array
5530 xml:
5531 wrapped: true
5532 name: 'channel'
5533 items:
5534 type: object
5535 xml:
5536 name: 'item'
5537 properties:
5538 link:
5539 type: string
5540 format: url
5541 guid:
5542 type: string
5543 pubDate:
5544 type: string
5545 format: date-time
5546 'content:encoded':
5547 type: string
5548 'dc:creator':
5549 type: string
5550 VideosForXML:
5551 type: array
5552 xml:
5553 wrapped: true
5554 name: 'channel'
5555 items:
5556 type: object
5557 xml:
5558 name: 'item'
5559 properties:
5560 link:
5561 type: string
5562 format: url
5563 description: video watch page URL
5564 guid:
5565 type: string
5566 description: video canonical URL
5567 pubDate:
5568 type: string
5569 format: date-time
5570 description: video publication date
5571 description:
5572 type: string
5573 description: video description
5574 'content:encoded':
5575 type: string
5576 description: video description
5577 'dc:creator':
5578 type: string
5579 description: publisher user name
5580 'media:category':
5581 type: integer
5582 description: video category (MRSS)
5583 'media:community':
5584 type: object
5585 description: see [media:community](https://www.rssboard.org/media-rss#media-community) (MRSS)
5586 properties:
5587 'media:statistics':
5588 type: object
5589 properties:
5590 views:
5591 type: integer
5592 xml:
5593 attribute: true
5594 'media:embed':
5595 type: object
5596 properties:
5597 url:
5598 type: string
5599 format: url
5600 description: video embed path, relative to the canonical URL domain (MRSS)
5601 xml:
5602 attribute: true
5603 'media:player':
5604 type: object
5605 properties:
5606 url:
5607 type: string
5608 format: url
5609 description: video watch path, relative to the canonical URL domain (MRSS)
5610 xml:
5611 attribute: true
5612 'media:thumbnail':
5613 type: object
5614 properties:
5615 url:
5616 type: string
5617 format: url
5618 xml:
5619 attribute: true
5620 height:
5621 type: integer
5622 xml:
5623 attribute: true
5624 width:
5625 type: integer
5626 xml:
5627 attribute: true
5628 'media:title':
5629 type: string
5630 description: see [media:title](https://www.rssboard.org/media-rss#media-title) (MRSS). We only use `plain` titles.
5631 'media:description':
5632 type: string
5633 'media:rating':
5634 type: string
5635 enum:
5636 - nonadult
5637 - adult
5638 description: see [media:rating](https://www.rssboard.org/media-rss#media-rating) (MRSS)
5639 'enclosure':
5640 type: object
5641 description: main streamable file for the video
5642 properties:
5643 url:
5644 type: string
5645 format: url
5646 xml:
5647 attribute: true
5648 type:
5649 type: string
5650 enum:
5651 - application/x-bittorrent
5652 xml:
5653 attribute: true
5654 length:
5655 type: integer
5656 xml:
5657 attribute: true
5658 'media:group':
5659 type: array
5660 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)
5661 items:
5662 anyOf:
5663 - $ref: '#/components/schemas/MRSSPeerLink'
5664 - $ref: '#/components/schemas/MRSSGroupContent'
5665 NotificationSettingValue:
5666 type: integer
5667 description: >
5668 Notification type
5669
5670 - `0` NONE
5671
5672 - `1` WEB
5673
5674 - `2` EMAIL
5675 enum:
5676 - 0
5677 - 1
5678 - 3
5679 Notification:
5680 properties:
5681 id:
5682 type: integer
5683 type:
5684 type: integer
5685 description: >
5686 Notification type, following the `UserNotificationType` enum:
5687
5688 - `1` NEW_VIDEO_FROM_SUBSCRIPTION
5689
5690 - `2` NEW_COMMENT_ON_MY_VIDEO
5691
5692 - `3` NEW_ABUSE_FOR_MODERATORS
5693
5694 - `4` BLACKLIST_ON_MY_VIDEO
5695
5696 - `5` UNBLACKLIST_ON_MY_VIDEO
5697
5698 - `6` MY_VIDEO_PUBLISHED
5699
5700 - `7` MY_VIDEO_IMPORT_SUCCESS
5701
5702 - `8` MY_VIDEO_IMPORT_ERROR
5703
5704 - `9` NEW_USER_REGISTRATION
5705
5706 - `10` NEW_FOLLOW
5707
5708 - `11` COMMENT_MENTION
5709
5710 - `12` VIDEO_AUTO_BLACKLIST_FOR_MODERATORS
5711
5712 - `13` NEW_INSTANCE_FOLLOWER
5713
5714 - `14` AUTO_INSTANCE_FOLLOWING
5715 read:
5716 type: boolean
5717 video:
5718 nullable: true
5719 allOf:
5720 - $ref: '#/components/schemas/VideoInfo'
5721 - type: object
5722 properties:
5723 channel:
5724 $ref: '#/components/schemas/ActorInfo'
5725 videoImport:
5726 nullable: true
5727 type: object
5728 properties:
5729 id:
5730 type: integer
5731 video:
5732 nullable: true
5733 $ref: '#/components/schemas/VideoInfo'
5734 torrentName:
5735 type: string
5736 nullable: true
5737 magnetUri:
5738 type: string
5739 format: uri
5740 nullable: true
5741 targetUri:
5742 type: string
5743 format: uri
5744 nullable: true
5745 comment:
5746 nullable: true
5747 type: object
5748 properties:
5749 id:
5750 type: integer
5751 threadId:
5752 type: integer
5753 video:
5754 $ref: '#/components/schemas/VideoInfo'
5755 account:
5756 $ref: '#/components/schemas/ActorInfo'
5757 videoAbuse:
5758 nullable: true
5759 type: object
5760 properties:
5761 id:
5762 type: integer
5763 video:
5764 allOf:
5765 - $ref: '#/components/schemas/VideoInfo'
5766 videoBlacklist:
5767 nullable: true
5768 type: object
5769 properties:
5770 id:
5771 type: integer
5772 video:
5773 allOf:
5774 - $ref: '#/components/schemas/VideoInfo'
5775 account:
5776 nullable: true
5777 allOf:
5778 - $ref: '#/components/schemas/ActorInfo'
5779 actorFollow:
5780 type: object
5781 nullable: true
5782 properties:
5783 id:
5784 type: integer
5785 follower:
5786 $ref: '#/components/schemas/ActorInfo'
5787 state:
5788 type: string
5789 enum:
5790 - pending
5791 - accepted
5792 following:
5793 type: object
5794 properties:
5795 type:
5796 type: string
5797 enum:
5798 - account
5799 - channel
5800 - instance
5801 name:
5802 type: string
5803 displayName:
5804 type: string
5805 host:
5806 type: string
5807 format: hostname
5808 createdAt:
5809 type: string
5810 format: date-time
5811 updatedAt:
5812 type: string
5813 format: date-time
5814 NotificationListResponse:
5815 properties:
5816 total:
5817 type: integer
5818 example: 1
5819 data:
5820 type: array
5821 maxItems: 100
5822 items:
5823 $ref: '#/components/schemas/Notification'
5824 Plugin:
5825 properties:
5826 name:
5827 type: string
5828 example: peertube-plugin-auth-ldap
5829 type:
5830 type: integer
5831 description: >
5832 - `1`: PLUGIN
5833
5834 - `2`: THEME
5835 enum:
5836 - 1
5837 - 2
5838 latestVersion:
5839 type: string
5840 example: 0.0.3
5841 version:
5842 type: string
5843 example: 0.0.1
5844 enabled:
5845 type: boolean
5846 uninstalled:
5847 type: boolean
5848 peertubeEngine:
5849 type: string
5850 example: 2.2.0
5851 description:
5852 type: string
5853 homepage:
5854 type: string
5855 format: url
5856 example: https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-auth-ldap
5857 settings:
5858 type: object
5859 additionalProperties: true
5860 createdAt:
5861 type: string
5862 format: date-time
5863 updatedAt:
5864 type: string
5865 format: date-time
5866 PluginResponse:
5867 properties:
5868 total:
5869 type: integer
5870 example: 1
5871 data:
5872 type: array
5873 maxItems: 100
5874 items:
5875 $ref: '#/components/schemas/Plugin'
5876
5877 LiveVideoUpdate:
5878 properties:
5879 saveReplay:
5880 type: boolean
5881 permanentLive:
5882 description: User can stream multiple times in a permanent live
5883 type: boolean
5884
5885 LiveVideoResponse:
5886 properties:
5887 rtmpUrl:
5888 type: string
5889 streamKey:
5890 type: string
5891 description: RTMP stream key to use to stream into this live video
5892 saveReplay:
5893 type: boolean
5894 permanentLive:
5895 description: User can stream multiple times in a permanent live
5896 type: boolean
5897
5898
5899
5900 callbacks:
5901 searchIndex:
5902 'https://search.example.org/api/v1/search/videos':
5903 post:
5904 summary: third-party search index MAY be used instead of the local index, if enabled by the instance admin. see `searchTarget`
5905 responses:
5906 '200':
5907 description: successful operation
5908 content:
5909 application/json:
5910 schema:
5911 $ref: '#/components/schemas/VideoListResponse'