f1cfb81a4439fec784c752f27ebc8f13bb5ef56b
[oweals/peertube.git] / support / doc / api / openapi.yaml
1 openapi: 3.0.0
2 info:
3   title: PeerTube
4   version: 2.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     The PeerTube API is built on HTTP(S). Our API is RESTful. It has predictable
17     resource URLs. It returns HTTP response codes to indicate errors. It also
18     accepts and returns JSON in the HTTP body. You can use your favorite
19     HTTP/REST library for your programming language to use PeerTube. No official
20     SDK is currently provided, but the spec API is fully compatible with
21     [openapi-generator](https://github.com/OpenAPITools/openapi-generator/wiki/API-client-generator-HOWTO)
22     which generates a client SDK in the language of your choice.
23
24     # Authentication
25     When you sign up for an account, you are given the possibility to generate
26     sessions, and authenticate using this session token. One session token can
27     currently be used at a time.
28
29     # Errors
30     The API uses standard HTTP status codes to indicate the success or failure
31     of the API call. The body of the response will be JSON in the following
32     format.
33
34     ```
35     {
36       "code": "unauthorized_request", // example inner error code
37       "error": "Token is invalid." // example exposed error message
38     }
39     ```
40 externalDocs:
41   url: https://docs.joinpeertube.org/api-rest-reference.html
42 tags:
43   - name: Accounts
44     description: >
45       Using some features of PeerTube require authentication, for which Accounts
46       provide different levels of permission as well as associated user
47       information. Accounts also encompass remote accounts discovered across the federation.
48   - name: Config
49     description: >
50       Each server exposes public information regarding supported videos and
51       options.
52   - name: Job
53     description: >
54       Jobs are long-running tasks enqueued and processed by the instance
55       itself. No additional worker registration is currently available.
56   - name: Server Following
57     description: >
58       Managing servers which the instance interacts with is crucial to the
59       concept of federation in PeerTube and external video indexation. The PeerTube
60       server then deals with inter-server ActivityPub operations and propagates
61       information across its social graph by posting activities to actors' inbox
62       endpoints.
63   - name: Video Abuse
64     description: |
65       Video abuses deal with reports of local or remote videos alike.
66   - name: Video
67     description: |
68       Operations dealing with listing, uploading, fetching or modifying videos.
69   - name: Search
70     description: |
71       The search helps to find _videos_ from within the instance and beyond.
72       Videos from other instances federated by the instance (that is, instances
73       followed by the instance) can be found via keywords and other criteria of
74       the advanced search.
75   - name: Video Comment
76     description: >
77       Operations dealing with comments to a video. Comments are organized in
78       threads.
79   - name: Video Playlist
80     description: >
81       Operations dealing with playlists of videos. Playlists are bound to users
82       and/or channels.
83   - name: Video Channel
84     description: >
85       Operations dealing with creation, modification and video listing of a
86       user's channels.
87   - name: Video Blacklist
88     description: >
89       Operations dealing with blacklisting videos (removing them from view and
90       preventing interactions).
91   - name: Video Rate
92     description: >
93       Voting for a video.
94 x-tagGroups:
95   - name: Accounts
96     tags:
97       - Accounts
98       - User
99       - My User
100   - name: Videos
101     tags:
102       - Video
103       - Video Caption
104       - Video Channel
105       - Video Comment
106       - Video Following
107       - Video Rate
108   - name: Moderation
109     tags:
110       - Video Abuse
111       - Video Blacklist
112   - name: Instance Configuration
113     tags:
114       - Config
115       - Server Following
116   - name: Jobs
117     tags:
118       - Job
119   - name: Search
120     tags:
121       - Search
122 paths:
123   '/accounts/{name}':
124     get:
125       tags:
126         - Accounts
127       summary: Get the account by name
128       parameters:
129         - $ref: '#/components/parameters/name'
130       responses:
131         '200':
132           description: successful operation
133           content:
134             application/json:
135               schema:
136                 $ref: '#/components/schemas/Account'
137   '/accounts/{name}/videos':
138     get:
139       tags:
140         - Accounts
141         - Video
142       summary: 'Get videos for an account, provided the name of that account'
143       parameters:
144         - $ref: '#/components/parameters/name'
145       responses:
146         '200':
147           description: successful operation
148           content:
149             application/json:
150               schema:
151                 $ref: '#/components/schemas/VideoListResponse'
152       x-code-samples:
153         - lang: JavaScript
154           source: |
155             fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
156             .then(function(response) {
157               return response.json()
158             }).then(function(data) {
159               console.log(data)
160             })
161         - lang: Shell
162           source: |
163             # pip install httpie
164             http -b GET https://peertube2.cpy.re/api/v1/accounts/{name}/videos
165         - lang: Ruby
166           source: |
167             require 'net/http'
168             require 'json'
169
170             uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
171
172             http = Net::HTTP.new(uri.host, uri.port)
173             http.use_ssl = true
174
175             response = http.get(uri.request_uri)
176
177             puts JSON.parse(response.read_body)
178         - lang: Python
179           source: |
180             import requests
181
182             r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos")
183             json = r.json()
184
185             print(json)
186   /accounts:
187     get:
188       tags:
189         - Accounts
190       summary: Get all accounts
191       parameters:
192         - $ref: '#/components/parameters/start'
193         - $ref: '#/components/parameters/count'
194         - $ref: '#/components/parameters/sort'
195       responses:
196         '200':
197           description: successful operation
198           content:
199             'application/json':
200               schema:
201                 type: array
202                 items:
203                   $ref: '#/components/schemas/Account'
204   /config:
205     get:
206       tags:
207         - Config
208       summary: Get the public configuration of the server
209       responses:
210         '200':
211           description: successful operation
212           content:
213             application/json:
214               schema:
215                 $ref: '#/components/schemas/ServerConfig'
216   /config/about:
217     get:
218       summary: Get the instance about page content
219       tags:
220         - Config
221       responses:
222         '200':
223           description: successful operation
224           content:
225             application/json:
226               schema:
227                 $ref: '#/components/schemas/ServerConfigAbout'
228   /config/custom:
229     get:
230       summary: Get the runtime configuration of the server
231       tags:
232         - Config
233       security:
234         - OAuth2:
235             - admin
236       responses:
237         '200':
238           description: successful operation
239           content:
240             application/json:
241               schema:
242                 $ref: '#/components/schemas/ServerConfigCustom'
243     put:
244       summary: Set the runtime configuration of the server
245       tags:
246         - Config
247       security:
248         - OAuth2:
249             - admin
250       responses:
251         '200':
252           description: successful operation
253     delete:
254       summary: Delete the runtime configuration of the server
255       tags:
256         - Config
257       security:
258         - OAuth2:
259             - admin
260       responses:
261         '200':
262           description: successful operation
263   /jobs/{state}:
264     get:
265       summary: Get list of jobs
266       security:
267         - OAuth2:
268             - admin
269       tags:
270         - Job
271       parameters:
272         - name: state
273           in: path
274           required: true
275           description: The state of the job
276           schema:
277             type: string
278             enum:
279               - active
280               - completed
281               - failed
282               - waiting
283               - delayed
284         - $ref: '#/components/parameters/start'
285         - $ref: '#/components/parameters/count'
286         - $ref: '#/components/parameters/sort'
287       responses:
288         '200':
289           description: successful operation
290           content:
291             application/json:
292               schema:
293                 type: array
294                 items:
295                   $ref: '#/components/schemas/Job'
296   '/server/following/{host}':
297     delete:
298       security:
299         - OAuth2:
300             - admin
301       tags:
302         - Server Following
303       summary: Unfollow a server by hostname
304       parameters:
305         - name: host
306           in: path
307           required: true
308           description: 'The host to unfollow '
309           schema:
310             type: string
311       responses:
312         '201':
313           description: successful operation
314   /server/followers:
315     get:
316       tags:
317         - Server Following
318       summary: Get followers of the server
319       parameters:
320         - $ref: '#/components/parameters/start'
321         - $ref: '#/components/parameters/count'
322         - $ref: '#/components/parameters/sort'
323       responses:
324         '200':
325           description: successful operation
326           content:
327             application/json:
328               schema:
329                 type: array
330                 items:
331                   $ref: '#/components/schemas/Follow'
332   /server/following:
333     get:
334       tags:
335         - Server Following
336       summary: Get servers followed by the server
337       parameters:
338         - $ref: '#/components/parameters/start'
339         - $ref: '#/components/parameters/count'
340         - $ref: '#/components/parameters/sort'
341       responses:
342         '200':
343           description: successful operation
344           content:
345             application/json:
346               schema:
347                 type: array
348                 items:
349                   $ref: '#/components/schemas/Follow'
350     post:
351       security:
352         - OAuth2:
353             - admin
354       tags:
355         - Server Following
356       summary: Follow a server
357       responses:
358         '204':
359           $ref: '#/paths/~1users~1me/put/responses/204'
360       requestBody:
361         content:
362           application/json:
363             schema:
364               $ref: '#/components/schemas/Follow'
365   /users:
366     post:
367       summary: Creates user
368       security:
369         - OAuth2:
370             - admin
371       tags:
372         - User
373       responses:
374         '200':
375           description: successful operation
376           content:
377             application/json:
378               schema:
379                 $ref: '#/components/schemas/AddUserResponse'
380       requestBody:
381         content:
382           application/json:
383             schema:
384               $ref: '#/components/schemas/AddUser'
385         description: User to create
386         required: true
387     get:
388       summary: Get a list of users
389       security:
390         - OAuth2: []
391       tags:
392         - User
393       parameters:
394         - $ref: '#/components/parameters/start'
395         - $ref: '#/components/parameters/count'
396         - $ref: '#/components/parameters/usersSort'
397       responses:
398         '200':
399           description: successful operation
400           content:
401             application/json:
402               schema:
403                 type: array
404                 items:
405                   $ref: '#/components/schemas/User'
406   '/users/{id}':
407     delete:
408       summary: Delete a user by its id
409       security:
410         - OAuth2:
411             - admin
412       tags:
413         - User
414       parameters:
415         - $ref: '#/components/parameters/id'
416       responses:
417         '204':
418           $ref: '#/paths/~1users~1me/put/responses/204'
419     get:
420       summary: Get user by its id
421       security:
422         - OAuth2: []
423       tags:
424         - User
425       parameters:
426         - $ref: '#/components/parameters/id'
427       responses:
428         '200':
429           description: successful operation
430           content:
431             application/json:
432               schema:
433                 $ref: '#/components/schemas/User'
434     put:
435       summary: Update user profile by its id
436       security:
437         - OAuth2: []
438       tags:
439         - User
440       parameters:
441         - $ref: '#/components/parameters/id'
442       responses:
443         '204':
444           $ref: '#/paths/~1users~1me/put/responses/204'
445       requestBody:
446         content:
447           application/json:
448             schema:
449               $ref: '#/components/schemas/UpdateUser'
450         required: true
451   /users/register:
452     post:
453       summary: Register a user
454       tags:
455         - User
456       responses:
457         '204':
458           $ref: '#/paths/~1users~1me/put/responses/204'
459       requestBody:
460         content:
461           application/json:
462             schema:
463               $ref: '#/components/schemas/RegisterUser'
464         required: true
465   /users/me:
466     get:
467       summary: Get current user information
468       security:
469         - OAuth2:
470           - user
471       tags:
472         - My User
473       responses:
474         '200':
475           description: successful operation
476           content:
477             application/json:
478               schema:
479                 type: array
480                 items:
481                   $ref: '#/components/schemas/User'
482     put:
483       summary: Update current user information
484       security:
485         - OAuth2:
486           - user
487       tags:
488         - My User
489       responses:
490         '204':
491           description: successful operation
492       requestBody:
493         content:
494           application/json:
495             schema:
496               $ref: '#/components/schemas/UpdateMe'
497         required: true
498   /users/me/videos/imports:
499     get:
500       summary: Get video imports of current user
501       security:
502         - OAuth2:
503             - user
504       tags:
505         - My User
506       parameters:
507         - $ref: '#/components/parameters/start'
508         - $ref: '#/components/parameters/count'
509         - $ref: '#/components/parameters/sort'
510       responses:
511         '200':
512           description: successful operation
513           content:
514             application/json:
515               schema:
516                 $ref: '#/components/schemas/VideoImport'
517   /users/me/video-quota-used:
518     get:
519       summary: Get current user used quota
520       security:
521         - OAuth2:
522           - user
523       tags:
524         - My User
525       responses:
526         '200':
527           description: successful operation
528           content:
529             application/json:
530               schema:
531                 type: number
532   '/users/me/videos/{videoId}/rating':
533     get:
534       summary: 'Get rating of video by its id, among those of the current user'
535       security:
536         - OAuth2: []
537       tags:
538         - My User
539       parameters:
540         - name: videoId
541           in: path
542           required: true
543           description: 'The video id '
544           schema:
545             type: string
546       responses:
547         '200':
548           description: successful operation
549           content:
550             application/json:
551               schema:
552                 $ref: '#/components/schemas/GetMeVideoRating'
553   /users/me/videos:
554     get:
555       summary: Get videos of the current user
556       security:
557         - OAuth2:
558           - user
559       tags:
560         - My User
561       parameters:
562         - $ref: '#/components/parameters/start'
563         - $ref: '#/components/parameters/count'
564         - $ref: '#/components/parameters/sort'
565       responses:
566         '200':
567           description: successful operation
568           content:
569             application/json:
570               schema:
571                 $ref: '#/components/schemas/VideoListResponse'
572   /users/me/subscriptions:
573     get:
574       summary: Get subscriptions of the current user
575       security:
576         - OAuth2:
577             - user
578       tags:
579         - My User
580       parameters:
581         - $ref: '#/components/parameters/start'
582         - $ref: '#/components/parameters/count'
583         - $ref: '#/components/parameters/sort'
584       responses:
585         '200':
586           description: successful operation
587     post:
588       summary: Add subscription to the current user
589       security:
590         - OAuth2:
591             - user
592       tags:
593         - My User
594       responses:
595         '200':
596           description: successful operation
597   /users/me/subscriptions/exist:
598     get:
599       summary: Get if subscriptions exist for the current user
600       security:
601         - OAuth2:
602             - user
603       tags:
604         - My User
605       parameters:
606         - $ref: '#/components/parameters/subscriptionsUris'
607       responses:
608         '200':
609           description: successful operation
610           content:
611             application/json:
612               schema:
613                 type: object
614   /users/me/subscriptions/videos:
615     get:
616       summary: Get videos of subscriptions of the current user
617       security:
618         - OAuth2:
619           - user
620       tags:
621         - My User
622       parameters:
623         - $ref: '#/components/parameters/start'
624         - $ref: '#/components/parameters/count'
625         - $ref: '#/components/parameters/sort'
626       responses:
627         '200':
628           description: successful operation
629           content:
630             application/json:
631               schema:
632                 $ref: '#/components/schemas/VideoListResponse'
633   '/users/me/subscriptions/{subscriptionHandle}':
634     get:
635       summary: Get subscription of the current user for a given uri
636       security:
637         - OAuth2:
638             - user
639       tags:
640         - My User
641       parameters:
642         - $ref: '#/components/parameters/subscriptionHandle'
643       responses:
644         '200':
645           description: successful operation
646           content:
647             application/json:
648               schema:
649                 $ref: '#/components/schemas/VideoChannel'
650     delete:
651       summary: Delete subscription of the current user for a given uri
652       security:
653         - OAuth2:
654             - user
655       tags:
656         - My User
657       parameters:
658         - $ref: '#/components/parameters/subscriptionHandle'
659       responses:
660         '200':
661           description: successful operation
662   /users/me/avatar/pick:
663     post:
664       summary: Update current user avatar
665       security:
666         - OAuth2: []
667       tags:
668         - My User
669       responses:
670         '200':
671           description: successful operation
672           content:
673             application/json:
674               schema:
675                 $ref: '#/components/schemas/Avatar'
676       requestBody:
677         content:
678           multipart/form-data:
679             schema:
680               type: object
681               properties:
682                 avatarfile:
683                   description: The file to upload.
684                   type: string
685                   format: binary
686             encoding:
687               avatarfile:
688                 contentType: image/png, image/jpeg
689   /videos:
690     get:
691       summary: Get list of videos
692       tags:
693         - Video
694       parameters:
695         - $ref: '#/components/parameters/categoryOneOf'
696         - $ref: '#/components/parameters/tagsOneOf'
697         - $ref: '#/components/parameters/tagsAllOf'
698         - $ref: '#/components/parameters/licenceOneOf'
699         - $ref: '#/components/parameters/languageOneOf'
700         - $ref: '#/components/parameters/nsfw'
701         - $ref: '#/components/parameters/filter'
702         - $ref: '#/components/parameters/start'
703         - $ref: '#/components/parameters/count'
704         - $ref: '#/components/parameters/videosSort'
705       responses:
706         '200':
707           description: successful operation
708           content:
709             application/json:
710               schema:
711                 $ref: '#/components/schemas/VideoListResponse'
712   /videos/categories:
713     get:
714       summary: Get list of video categories known by the server
715       tags:
716         - Video
717       responses:
718         '200':
719           description: successful operation
720           content:
721             application/json:
722               schema:
723                 type: array
724                 items:
725                   type: string
726   /videos/licences:
727     get:
728       summary: Get list of video licences known by the server
729       tags:
730         - Video
731       responses:
732         '200':
733           description: successful operation
734           content:
735             application/json:
736               schema:
737                 type: array
738                 items:
739                   type: string
740   /videos/languages:
741     get:
742       summary: Get list of languages known by the server
743       tags:
744         - Video
745       responses:
746         '200':
747           description: successful operation
748           content:
749             application/json:
750               schema:
751                 type: array
752                 items:
753                   type: string
754   /videos/privacies:
755     get:
756       summary: Get list of privacy policies supported by the server
757       tags:
758         - Video
759       responses:
760         '200':
761           description: successful operation
762           content:
763             application/json:
764               schema:
765                 type: array
766                 items:
767                   type: string
768   '/videos/{id}':
769     put:
770       summary: Update metadata for a video by its id
771       security:
772         - OAuth2: []
773       tags:
774         - Video
775       parameters:
776         - $ref: '#/components/parameters/idOrUUID'
777       responses:
778         '204':
779           description: successful operation
780       requestBody:
781         content:
782           multipart/form-data:
783             schema:
784               type: object
785               properties:
786                 thumbnailfile:
787                   description: Video thumbnail file
788                   type: string
789                   format: binary
790                 previewfile:
791                   description: Video preview file
792                   type: string
793                   format: binary
794                 category:
795                   description: Video category
796                   type: string
797                 licence:
798                   description: Video licence
799                   type: string
800                 language:
801                   description: Video language
802                   type: string
803                 description:
804                   description: Video description
805                   type: string
806                 waitTranscoding:
807                   description: Whether or not we wait transcoding before publish the video
808                   type: string
809                 support:
810                   description: Text describing how to support the video uploader
811                   type: string
812                 nsfw:
813                   description: Whether or not this video contains sensitive content
814                   type: string
815                 name:
816                   description: Video name
817                   type: string
818                 tags:
819                   description: Video tags (maximum 5 tags each between 2 and 30 characters)
820                   type: array
821                   minItems: 1
822                   maxItems: 5
823                   items:
824                     type: string
825                     minLength: 2
826                     maxLength: 30
827                 commentsEnabled:
828                   description: Enable or disable comments for this video
829                   type: string
830                 originallyPublishedAt:
831                   description: Date when the content was originally published
832                   type: string
833                   format: date-time
834                 scheduleUpdate:
835                   $ref: '#/components/schemas/VideoScheduledUpdate'
836             encoding:
837               thumbnailfile:
838                 contentType: image/jpeg
839               previewfile:
840                 contentType: image/jpeg
841     get:
842       summary: Get a video by its id
843       tags:
844         - Video
845       parameters:
846         - $ref: '#/components/parameters/idOrUUID'
847       responses:
848         '200':
849           description: successful operation
850           content:
851             application/json:
852               schema:
853                 $ref: '#/components/schemas/VideoDetails'
854     delete:
855       summary: Delete a video by its id
856       security:
857         - OAuth2: []
858       tags:
859         - Video
860       parameters:
861         - $ref: '#/components/parameters/idOrUUID'
862       responses:
863         '204':
864           $ref: '#/paths/~1users~1me/put/responses/204'
865   '/videos/{id}/description':
866     get:
867       summary: Get a video description by its id
868       tags:
869         - Video
870       parameters:
871         - $ref: '#/components/parameters/idOrUUID'
872       responses:
873         '200':
874           description: successful operation
875           content:
876             application/json:
877               schema:
878                 type: string
879   '/videos/{id}/views':
880     post:
881       summary: Add a view to the video by its id
882       tags:
883         - Video
884       parameters:
885         - $ref: '#/components/parameters/idOrUUID'
886       responses:
887         '204':
888           $ref: '#/paths/~1users~1me/put/responses/204'
889   '/videos/{id}/watching':
890     put:
891       summary: Set watching progress of a video by its id for a user
892       tags:
893         - Video
894       security:
895         - OAuth2: []
896       parameters:
897         - $ref: '#/components/parameters/idOrUUID'
898       requestBody:
899         content:
900           application/json:
901             schema:
902               $ref: '#/components/schemas/UserWatchingVideo'
903         required: true
904       responses:
905         '204':
906           $ref: '#/paths/~1users~1me/put/responses/204'
907   /videos/ownership:
908     get:
909       summary: Get list of video ownership changes requests
910       tags:
911         - Video
912       security:
913         - OAuth2: []
914       responses:
915         '200':
916           description: successful operation
917   '/videos/ownership/{id}/accept':
918     post:
919       summary: Refuse ownership change request for video by its id
920       tags:
921         - Video
922       security:
923         - OAuth2: []
924       parameters:
925         - $ref: '#/components/parameters/idOrUUID'
926       responses:
927         '204':
928           $ref: '#/paths/~1users~1me/put/responses/204'
929   '/videos/ownership/{id}/refuse':
930     post:
931       summary: Accept ownership change request for video by its id
932       tags:
933         - Video
934       security:
935         - OAuth2: []
936       parameters:
937         - $ref: '#/components/parameters/idOrUUID'
938       responses:
939         '204':
940           $ref: '#/paths/~1users~1me/put/responses/204'
941   '/videos/{id}/give-ownership':
942     post:
943       summary: Request change of ownership for a video you own, by its id
944       tags:
945         - Video
946       security:
947         - OAuth2: []
948       parameters:
949         - $ref: '#/components/parameters/idOrUUID'
950       requestBody:
951         required: true
952         content:
953           application/x-www-form-urlencoded:
954             schema:
955               type: object
956               properties:
957                 username:
958                   type: string
959               required:
960                 - username
961       responses:
962         '204':
963           $ref: '#/paths/~1users~1me/put/responses/204'
964         '400':
965           description: 'Changing video ownership to a remote account is not supported yet'
966   /videos/upload:
967     post:
968       summary: Upload a video file with its metadata
969       security:
970         - OAuth2: []
971       tags:
972         - Video
973       responses:
974         '200':
975           description: successful operation
976           content:
977             application/json:
978               schema:
979                 $ref: '#/components/schemas/VideoUploadResponse'
980       requestBody:
981         content:
982           multipart/form-data:
983             schema:
984               type: object
985               properties:
986                 videofile:
987                   description: Video file
988                   type: string
989                   format: binary
990                 channelId:
991                   description: Channel id that will contain this video
992                   type: number
993                 thumbnailfile:
994                   description: Video thumbnail file
995                   type: string
996                   format: binary
997                 previewfile:
998                   description: Video preview file
999                   type: string
1000                   format: binary
1001                 privacy:
1002                   $ref: '#/components/schemas/VideoPrivacySet'
1003                 category:
1004                   description: Video category
1005                   type: string
1006                 licence:
1007                   description: Video licence
1008                   type: string
1009                 language:
1010                   description: Video language
1011                   type: string
1012                 description:
1013                   description: Video description
1014                   type: string
1015                 waitTranscoding:
1016                   description: Whether or not we wait transcoding before publish the video
1017                   type: string
1018                 support:
1019                   description: Text describing how to support the video uploader
1020                   type: string
1021                 nsfw:
1022                   description: Whether or not this video contains sensitive content
1023                   type: string
1024                 name:
1025                   description: Video name
1026                   type: string
1027                 tags:
1028                   description: Video tags (maximum 5 tags each between 2 and 30 characters)
1029                   type: array
1030                   minItems: 1
1031                   maxItems: 5
1032                   items:
1033                     type: string
1034                     minLength: 2
1035                     maxLength: 30
1036                 commentsEnabled:
1037                   description: Enable or disable comments for this video
1038                   type: string
1039                 originallyPublishedAt:
1040                   description: Date when the content was originally published
1041                   type: string
1042                   format: date-time
1043                 scheduleUpdate:
1044                   $ref: '#/components/schemas/VideoScheduledUpdate'
1045               required:
1046                 - videofile
1047                 - channelId
1048                 - name
1049             encoding:
1050               videofile:
1051                 contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream
1052               thumbnailfile:
1053                 contentType: image/jpeg
1054               previewfile:
1055                 contentType: image/jpeg
1056       x-code-samples:
1057         - lang: Shell
1058           source: |
1059             ## DEPENDENCIES: httpie, jq
1060             # pip install httpie
1061             USERNAME="<your_username>"
1062             PASSWORD="<your_password>"
1063             FILE_PATH="<your_file_path>"
1064             CHANNEL_ID="<your_channel_id>"
1065             NAME="<video_name>"
1066
1067             API_PATH="https://peertube2.cpy.re/api/v1"
1068             ## AUTH
1069             client_id=$(http -b GET "$API_PATH/oauth-clients/local" | jq -r ".client_id")
1070             client_secret=$(http -b GET "$API_PATH/oauth-clients/local" | jq -r ".client_secret")
1071             token=$(http -b --form POST "$API_PATH/users/token" \
1072               client_id="$client_id" client_secret="$client_secret" grant_type=password response_type=code \
1073               username=$USERNAME \
1074               password=$PASSWORD \
1075               | jq -r ".access_token")
1076             ## VIDEO UPLOAD
1077             http -b --form POST "$API_PATH/videos/upload" \
1078               videofile@$FILE_PATH \
1079               channelId=$CHANNEL_ID \
1080               name=$NAME \
1081               "Authorization:Bearer $token"
1082   /videos/imports:
1083     post:
1084       summary: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
1085       security:
1086         - OAuth2: []
1087       tags:
1088         - Video
1089       responses:
1090         '200':
1091           description: successful operation
1092           content:
1093             application/json:
1094               schema:
1095                 $ref: '#/components/schemas/VideoUploadResponse'
1096       requestBody:
1097         content:
1098           multipart/form-data:
1099             schema:
1100               type: object
1101               properties:
1102                 torrentfile:
1103                   description: Torrent File
1104                   type: string
1105                   format: binary
1106                 targetUrl:
1107                   description: HTTP target URL
1108                   type: string
1109                 magnetUri:
1110                   description: Magnet URI
1111                   type: string
1112                 channelId:
1113                   description: Channel id that will contain this video
1114                   type: number
1115                 thumbnailfile:
1116                   description: Video thumbnail file
1117                   type: string
1118                   format: binary
1119                 previewfile:
1120                   description: Video preview file
1121                   type: string
1122                   format: binary
1123                 privacy:
1124                   $ref: '#/components/schemas/VideoPrivacySet'
1125                 category:
1126                   description: Video category
1127                   type: string
1128                 licence:
1129                   description: Video licence
1130                   type: string
1131                 language:
1132                   description: Video language
1133                   type: string
1134                 description:
1135                   description: Video description
1136                   type: string
1137                 waitTranscoding:
1138                   description: Whether or not we wait transcoding before publish the video
1139                   type: string
1140                 support:
1141                   description: Text describing how to support the video uploader
1142                   type: string
1143                 nsfw:
1144                   description: Whether or not this video contains sensitive content
1145                   type: string
1146                 name:
1147                   description: Video name
1148                   type: string
1149                 tags:
1150                   description: Video tags (maximum 5 tags each between 2 and 30 characters)
1151                   type: array
1152                   minItems: 1
1153                   maxItems: 5
1154                   items:
1155                     type: string
1156                     minLength: 2
1157                     maxLength: 30
1158                 commentsEnabled:
1159                   description: Enable or disable comments for this video
1160                   type: string
1161                 scheduleUpdate:
1162                   $ref: '#/components/schemas/VideoScheduledUpdate'
1163               required:
1164                 - channelId
1165                 - name
1166             encoding:
1167               torrentfile:
1168                 contentType: application/x-bittorrent
1169               thumbnailfile:
1170                 contentType: image/jpeg
1171               previewfile:
1172                 contentType: image/jpeg
1173   /videos/abuse:
1174     get:
1175       summary: Get list of reported video abuses
1176       security:
1177         - OAuth2: []
1178       tags:
1179         - Video Abuse
1180       parameters:
1181         - $ref: '#/components/parameters/start'
1182         - $ref: '#/components/parameters/count'
1183         - $ref: '#/components/parameters/abusesSort'
1184       responses:
1185         '200':
1186           description: successful operation
1187           content:
1188             application/json:
1189               schema:
1190                 type: array
1191                 items:
1192                   $ref: '#/components/schemas/VideoAbuse'
1193   '/videos/{id}/abuse':
1194     post:
1195       summary: 'Report an abuse, on a video by its id'
1196       security:
1197         - OAuth2: []
1198       tags:
1199         - Video Abuse
1200       parameters:
1201         - $ref: '#/components/parameters/idOrUUID'
1202       responses:
1203         '204':
1204           $ref: '#/paths/~1users~1me/put/responses/204'
1205   '/videos/{id}/blacklist':
1206     post:
1207       summary: Put on blacklist a video by its id
1208       security:
1209         - OAuth2:
1210             - admin
1211             - moderator
1212       tags:
1213         - Video Blacklist
1214       parameters:
1215         - $ref: '#/components/parameters/idOrUUID'
1216       responses:
1217         '204':
1218           $ref: '#/paths/~1users~1me/put/responses/204'
1219     delete:
1220       summary: Delete an entry of the blacklist of a video by its id
1221       security:
1222         - OAuth2:
1223             - admin
1224             - moderator
1225       tags:
1226         - Video Blacklist
1227       parameters:
1228         - $ref: '#/components/parameters/idOrUUID'
1229       responses:
1230         '204':
1231           $ref: '#/paths/~1users~1me/put/responses/204'
1232   /videos/blacklist:
1233     get:
1234       summary: Get list of videos on blacklist
1235       security:
1236         - OAuth2:
1237             - admin
1238             - moderator
1239       tags:
1240         - Video Blacklist
1241       parameters:
1242         - $ref: '#/components/parameters/start'
1243         - $ref: '#/components/parameters/count'
1244         - $ref: '#/components/parameters/blacklistsSort'
1245       responses:
1246         '200':
1247           description: successful operation
1248           content:
1249             application/json:
1250               schema:
1251                 type: array
1252                 items:
1253                   $ref: '#/components/schemas/VideoBlacklist'
1254   /videos/{id}/captions:
1255     get:
1256       summary: Get list of video's captions
1257       tags:
1258         - Video Caption
1259       parameters:
1260         - $ref: '#/components/parameters/idOrUUID'
1261       responses:
1262         '200':
1263           description: successful operation
1264           content:
1265             application/json:
1266               schema:
1267                 type: object
1268                 properties:
1269                   total:
1270                     type: integer
1271                   data:
1272                     type: array
1273                     items:
1274                       $ref: '#/components/schemas/VideoCaption'
1275   /videos/{id}/captions/{captionLanguage}:
1276     put:
1277       summary: Add or replace a video caption
1278       tags:
1279         - Video Caption
1280       parameters:
1281         - $ref: '#/components/parameters/idOrUUID'
1282         - $ref: '#/components/parameters/captionLanguage'
1283       requestBody:
1284         content:
1285           multipart/form-data:
1286             schema:
1287               type: object
1288               properties:
1289                 captionfile:
1290                   description: The file to upload.
1291                   type: string
1292                   format: binary
1293             encoding:
1294               captionfile:
1295                 contentType: text/vtt, application/x-subrip, text/plain
1296       responses:
1297         '204':
1298           $ref: '#/paths/~1users~1me/put/responses/204'
1299     delete:
1300       summary: Delete a video caption
1301       tags:
1302         - Video Caption
1303       parameters:
1304         - $ref: '#/components/parameters/idOrUUID'
1305         - $ref: '#/components/parameters/captionLanguage'
1306       responses:
1307         '204':
1308           $ref: '#/paths/~1users~1me/put/responses/204'
1309   /video-channels:
1310     get:
1311       summary: Get list of video channels
1312       tags:
1313         - Video Channel
1314       parameters:
1315         - $ref: '#/components/parameters/start'
1316         - $ref: '#/components/parameters/count'
1317         - $ref: '#/components/parameters/sort'
1318       responses:
1319         '200':
1320           description: successful operation
1321           content:
1322             application/json:
1323               schema:
1324                 type: array
1325                 items:
1326                   $ref: '#/components/schemas/VideoChannel'
1327     post:
1328       summary: Creates a video channel for the current user
1329       security:
1330         - OAuth2: []
1331       tags:
1332         - Video Channel
1333       responses:
1334         '204':
1335           $ref: '#/paths/~1users~1me/put/responses/204'
1336       requestBody:
1337         content:
1338           application/json:
1339             schema:
1340               $ref: '#/components/schemas/VideoChannelCreate'
1341   '/video-channels/{channelHandle}':
1342     get:
1343       summary: Get a video channel by its id
1344       tags:
1345         - Video Channel
1346       parameters:
1347         - $ref: '#/components/parameters/channelHandle'
1348       responses:
1349         '200':
1350           description: successful operation
1351           content:
1352             application/json:
1353               schema:
1354                 $ref: '#/components/schemas/VideoChannel'
1355     put:
1356       summary: Update a video channel by its id
1357       security:
1358         - OAuth2: []
1359       tags:
1360         - Video Channel
1361       parameters:
1362         - $ref: '#/components/parameters/channelHandle'
1363       responses:
1364         '204':
1365           $ref: '#/paths/~1users~1me/put/responses/204'
1366       requestBody:
1367         content:
1368           application/json:
1369             schema:
1370               $ref: '#/components/schemas/VideoChannelUpdate'
1371     delete:
1372       summary: Delete a video channel by its id
1373       security:
1374         - OAuth2: []
1375       tags:
1376         - Video Channel
1377       parameters:
1378         - $ref: '#/components/parameters/channelHandle'
1379       responses:
1380         '204':
1381           $ref: '#/paths/~1users~1me/put/responses/204'
1382   '/video-channels/{channelHandle}/videos':
1383     get:
1384       summary: Get videos of a video channel by its id
1385       tags:
1386         - Video
1387         - Video Channel
1388       parameters:
1389         - $ref: '#/components/parameters/channelHandle'
1390       responses:
1391         '200':
1392           description: successful operation
1393           content:
1394             application/json:
1395               schema:
1396                 $ref: '#/components/schemas/VideoListResponse'
1397   /video-playlists:
1398     get:
1399       summary: Get list of video playlists
1400       tags:
1401         - Video Playlist
1402       parameters:
1403         - $ref: '#/components/parameters/start'
1404         - $ref: '#/components/parameters/count'
1405         - $ref: '#/components/parameters/sort'
1406       responses:
1407         '200':
1408           description: successful operation
1409           content:
1410             application/json:
1411               schema:
1412                 type: array
1413                 items:
1414                   $ref: '#/components/schemas/VideoPlaylist'
1415   '/accounts/{name}/video-channels':
1416     get:
1417       summary: Get video channels of an account by its name
1418       tags:
1419         - Video Channel
1420       parameters:
1421         - $ref: '#/components/parameters/name'
1422       responses:
1423         '200':
1424           description: successful operation
1425           content:
1426             application/json:
1427               schema:
1428                 type: array
1429                 items:
1430                   $ref: '#/components/schemas/VideoChannel'
1431   '/accounts/{name}/ratings':
1432     get:
1433       summary: Get ratings of an account by its name
1434       security:
1435         - OAuth2: []
1436       tags:
1437         - User
1438       parameters:
1439         - $ref: '#/components/parameters/name'
1440         - $ref: '#/components/parameters/start'
1441         - $ref: '#/components/parameters/count'
1442         - $ref: '#/components/parameters/sort'
1443         - name: rating
1444           in: query
1445           required: false
1446           description: Optionally filter which ratings to retrieve
1447           schema:
1448             type: string
1449             enum:
1450               - like
1451               - dislike
1452       responses:
1453         '200':
1454           description: successful operation
1455           content:
1456             application/json:
1457               schema:
1458                 type: array
1459                 items:
1460                   $ref: '#/components/schemas/VideoRating'
1461   '/videos/{id}/comment-threads':
1462     get:
1463       summary: Get the comment threads of a video by its id
1464       tags:
1465         - Video Comment
1466       parameters:
1467         - $ref: '#/components/parameters/idOrUUID'
1468         - $ref: '#/components/parameters/start'
1469         - $ref: '#/components/parameters/count'
1470         - $ref: '#/components/parameters/commentsSort'
1471       responses:
1472         '200':
1473           description: successful operation
1474           content:
1475             application/json:
1476               schema:
1477                 $ref: '#/components/schemas/CommentThreadResponse'
1478     post:
1479       summary: 'Creates a comment thread, on a video by its id'
1480       security:
1481         - OAuth2: []
1482       tags:
1483         - Video Comment
1484       parameters:
1485         - $ref: '#/components/parameters/idOrUUID'
1486       responses:
1487         '200':
1488           description: successful operation
1489           content:
1490             application/json:
1491               schema:
1492                 $ref: '#/components/schemas/CommentThreadPostResponse'
1493   '/videos/{id}/comment-threads/{threadId}':
1494     get:
1495       summary: 'Get the comment thread by its id, of a video by its id'
1496       tags:
1497         - Video Comment
1498       parameters:
1499         - $ref: '#/components/parameters/idOrUUID'
1500         - $ref: '#/components/parameters/threadId'
1501       responses:
1502         '200':
1503           description: successful operation
1504           content:
1505             application/json:
1506               schema:
1507                 $ref: '#/components/schemas/VideoCommentThreadTree'
1508   '/videos/{id}/comments/{commentId}':
1509     post:
1510       summary: 'Creates a comment in a comment thread by its id, of a video by its id'
1511       security:
1512         - OAuth2: []
1513       tags:
1514         - Video Comment
1515       parameters:
1516         - $ref: '#/components/parameters/idOrUUID'
1517         - $ref: '#/components/parameters/commentId'
1518       responses:
1519         '200':
1520           description: successful operation
1521           content:
1522             application/json:
1523               schema:
1524                 $ref: '#/components/schemas/CommentThreadPostResponse'
1525     delete:
1526       summary: 'Delete a comment in a comment thread by its id, of a video by its id'
1527       security:
1528         - OAuth2: []
1529       tags:
1530         - Video Comment
1531       parameters:
1532         - $ref: '#/components/parameters/idOrUUID'
1533         - $ref: '#/components/parameters/commentId'
1534       responses:
1535         '204':
1536           $ref: '#/paths/~1users~1me/put/responses/204'
1537   '/videos/{id}/rate':
1538     put:
1539       summary: Vote for a video by its id
1540       security:
1541         - OAuth2: []
1542       tags:
1543         - Video Rate
1544       parameters:
1545         - $ref: '#/components/parameters/idOrUUID'
1546       responses:
1547         '204':
1548           $ref: '#/paths/~1users~1me/put/responses/204'
1549   /search/videos:
1550     get:
1551       tags:
1552         - Search
1553       summary: Get the videos corresponding to a given query
1554       parameters:
1555         - $ref: '#/components/parameters/start'
1556         - $ref: '#/components/parameters/count'
1557         - $ref: '#/components/parameters/videosSearchSort'
1558         - name: search
1559           in: query
1560           required: true
1561           description: String to search
1562           schema:
1563             type: string
1564       responses:
1565         '200':
1566           description: successful operation
1567           content:
1568             application/json:
1569               schema:
1570                 $ref: '#/components/schemas/VideoListResponse'
1571 servers:
1572   - url: 'https://peertube.cpy.re/api/v1'
1573     description: Live Test Server (live data - stable version)
1574   - url: 'https://peertube2.cpy.re/api/v1'
1575     description: Live Test Server (live data - bleeding edge version)
1576   - url: 'https://peertube3.cpy.re/api/v1'
1577     description: Live Test Server (live data - bleeding edge version)
1578 components:
1579   parameters:
1580     start:
1581       name: start
1582       in: query
1583       required: false
1584       description: Offset
1585       schema:
1586         type: number
1587     count:
1588       name: count
1589       in: query
1590       required: false
1591       description: Number of items
1592       schema:
1593         type: number
1594     sort:
1595       name: sort
1596       in: query
1597       required: false
1598       description: Sort column (-createdAt for example)
1599       schema:
1600         type: string
1601     videosSort:
1602       name: sort
1603       in: query
1604       required: false
1605       description: Sort videos by criteria
1606       schema:
1607         type: string
1608         enum:
1609         - -name
1610         - -duration
1611         - -createdAt
1612         - -publishedAt
1613         - -views
1614         - -likes
1615         - -trending
1616     videosSearchSort:
1617       name: sort
1618       in: query
1619       required: false
1620       description: Sort videos by criteria
1621       schema:
1622         type: string
1623         enum:
1624         - -name
1625         - -duration
1626         - -createdAt
1627         - -publishedAt
1628         - -views
1629         - -likes
1630         - -match
1631     commentsSort:
1632       name: sort
1633       in: query
1634       required: false
1635       description: Sort comments by criteria
1636       schema:
1637         type: string
1638         enum:
1639         - -createdAt
1640         - -totalReplies
1641     blacklistsSort:
1642       name: sort
1643       in: query
1644       required: false
1645       description: Sort blacklists by criteria
1646       schema:
1647         type: string
1648         enum:
1649         - -id
1650         - -name
1651         - -duration
1652         - -views
1653         - -likes
1654         - -dislikes
1655         - -uuid
1656         - -createdAt
1657     usersSort:
1658       name: sort
1659       in: query
1660       required: false
1661       description: Sort users by criteria
1662       schema:
1663         type: string
1664         enum:
1665         - -id
1666         - -username
1667         - -createdAt
1668     abusesSort:
1669       name: sort
1670       in: query
1671       required: false
1672       description: Sort abuses by criteria
1673       schema:
1674         type: string
1675         enum:
1676         - -id
1677         - -createdAt
1678         - -state
1679     name:
1680       name: name
1681       in: path
1682       required: true
1683       description: >-
1684         The name of the account (chocobozzz or chocobozzz@peertube.cpy.re for
1685         example)
1686       schema:
1687         type: string
1688     id:
1689       name: id
1690       in: path
1691       required: true
1692       description: The user id
1693       schema:
1694         type: number
1695     idOrUUID:
1696       name: id
1697       in: path
1698       required: true
1699       description: The video id or uuid
1700       schema:
1701         type: string
1702     captionLanguage:
1703       name: captionLanguage
1704       in: path
1705       required: true
1706       description: The caption language
1707       schema:
1708         type: string
1709     channelHandle:
1710       name: channelHandle
1711       in: path
1712       required: true
1713       description: "The video channel handle (example: 'my_username@example.com' or 'my_username')"
1714       schema:
1715         type: string
1716     subscriptionHandle:
1717       name: subscriptionHandle
1718       in: path
1719       required: true
1720       description: "The subscription handle (example: 'my_username@example.com' or 'my_username')"
1721       schema:
1722         type: string
1723     threadId:
1724       name: threadId
1725       in: path
1726       required: true
1727       description: The thread id (root comment id)
1728       schema:
1729         type: number
1730     commentId:
1731       name: commentId
1732       in: path
1733       required: true
1734       description: The comment id
1735       schema:
1736         type: number
1737     categoryOneOf:
1738       name: categoryOneOf
1739       in: query
1740       required: false
1741       description: category id of the video
1742       schema:
1743         oneOf:
1744         - type: number
1745         - type: array
1746           items:
1747             type: number
1748       style: form
1749       explode: false
1750     tagsOneOf:
1751       name: tagsOneOf
1752       in: query
1753       required: false
1754       description: tag(s) of the video
1755       schema:
1756         oneOf:
1757         - type: string
1758         - type: array
1759           items:
1760             type: string
1761       style: form
1762       explode: false
1763     tagsAllOf:
1764       name: tagsAllOf
1765       in: query
1766       required: false
1767       description: tag(s) of the video, where all should be present in the video
1768       schema:
1769         oneOf:
1770         - type: string
1771         - type: array
1772           items:
1773             type: string
1774       style: form
1775       explode: false
1776     languageOneOf:
1777       name: languageOneOf
1778       in: query
1779       required: false
1780       description: language id of the video
1781       schema:
1782         oneOf:
1783         - type: string
1784         - type: array
1785           items:
1786             type: string
1787       style: form
1788       explode: false
1789     licenceOneOf:
1790       name: licenceOneOf
1791       in: query
1792       required: false
1793       description: licence id of the video
1794       schema:
1795         oneOf:
1796         - type: number
1797         - type: array
1798           items:
1799             type: number
1800       style: form
1801       explode: false
1802     nsfw:
1803       name: nsfw
1804       in: query
1805       required: false
1806       description: whether to include nsfw videos, if any
1807       schema:
1808         type: string
1809         enum:
1810         - 'true'
1811         - 'false'
1812     filter:
1813       name: filter
1814       in: query
1815       required: false
1816       description: >
1817         Special filters (local for instance) which might require special rights:
1818          * `local` - only videos local to the instance
1819          * `all-local` - only videos local to the instance, but showing private and unlisted videos (requires Admin privileges)
1820       schema:
1821         type: string
1822         enum:
1823         - local
1824         - all-local
1825     subscriptionsUris:
1826       name: uris
1827       in: query
1828       required: true
1829       description: list of uris to check if each is part of the user subscriptions
1830       schema:
1831         type: array
1832         items:
1833           type: string
1834   securitySchemes:
1835     OAuth2:
1836       description: >
1837         In the header: *Authorization: Bearer <token\>*
1838
1839
1840         Authenticating via OAuth requires the following steps:
1841
1842
1843         - Have an account with sufficient authorization levels
1844
1845         - [Generate](https://docs.joinpeertube.org/#/api-rest-getting-started) a
1846         Bearer Token
1847
1848         - Make Authenticated Requests
1849       type: oauth2
1850       flows:
1851         password:
1852           tokenUrl: 'https://peertube.example.com/api/v1/users/token'
1853           scopes:
1854             admin: Admin scope
1855             moderator: Moderator scope
1856             user: User scope
1857   schemas:
1858     VideoConstantNumber:
1859       properties:
1860         id:
1861           type: number
1862         label:
1863           type: string
1864     VideoConstantString:
1865       properties:
1866         id:
1867           type: string
1868         label:
1869           type: string
1870     VideoPrivacySet:
1871       type: integer
1872       enum:
1873         - 1
1874         - 2
1875         - 3
1876       description: 'The video privacy (Public = 1, Unlisted = 2, Private = 3)'
1877     VideoPrivacyConstant:
1878       properties:
1879         id:
1880           type: integer
1881           enum:
1882             - 1
1883             - 2
1884             - 3
1885         label:
1886           type: string
1887     VideoStateConstant:
1888       properties:
1889         id:
1890           type: integer
1891           enum:
1892             - 1
1893             - 2
1894             - 3
1895           description: 'The video state (Published = 1, to transcode = 2, to import = 3)'
1896         label:
1897           type: string
1898     VideoResolutionConstant:
1899       properties:
1900         id:
1901           type: integer
1902           description: 'Video resolution (240, 360, 720 ...)'
1903         label:
1904           type: string
1905     VideoScheduledUpdate:
1906       properties:
1907         privacy:
1908           $ref: '#/components/schemas/VideoPrivacySet'
1909           description: Video privacy target
1910         updateAt:
1911           type: string
1912           format: date
1913           description: When to update the video
1914       required:
1915         - updateAt
1916     VideoAccountSummary:
1917       properties:
1918         id:
1919           type: number
1920         name:
1921           type: string
1922         displayName:
1923           type: string
1924         url:
1925           type: string
1926         host:
1927           type: string
1928         avatar:
1929           nullable: true
1930           $ref: '#/components/schemas/Avatar'
1931     VideoChannelSummary:
1932       properties:
1933         id:
1934           type: number
1935         name:
1936           type: string
1937         displayName:
1938           type: string
1939         url:
1940           type: string
1941         host:
1942           type: string
1943         avatar:
1944           nullable: true
1945           $ref: '#/components/schemas/Avatar'
1946     PlaylistElement:
1947       properties:
1948         position:
1949           type: number
1950         startTimestamp:
1951           type: number
1952         stopTimestamp:
1953           type: number
1954         video:
1955           nullable: true
1956           $ref: '#/components/schemas/Video'
1957     VideoFile:
1958       properties:
1959         magnetUri:
1960           type: string
1961         resolution:
1962           $ref: '#/components/schemas/VideoResolutionConstant'
1963         size:
1964           type: number
1965           description: 'Video file size in bytes'
1966         torrentUrl:
1967           type: string
1968         torrentDownloadUrl:
1969           type: string
1970         fileUrl:
1971           type: string
1972         fileDownloadUrl:
1973           type: string
1974         fps:
1975           type: number
1976     VideoStreamingPlaylists:
1977       properties:
1978         id:
1979           type: number
1980         type:
1981           type: number
1982           enum:
1983             - 1
1984           description: 'Playlist type (HLS = 1)'
1985         playlistUrl:
1986           type: string
1987         segmentsSha256Url:
1988           type: string
1989         redundancies:
1990           type: array
1991           items:
1992             type: object
1993             properties:
1994               baseUrl:
1995                 type: string
1996     Video:
1997       properties:
1998         id:
1999           type: number
2000         uuid:
2001           type: string
2002         createdAt:
2003           type: string
2004         publishedAt:
2005           type: string
2006         updatedAt:
2007           type: string
2008         originallyPublishedAt:
2009           type: string
2010         category:
2011           $ref: '#/components/schemas/VideoConstantNumber'
2012         licence:
2013           $ref: '#/components/schemas/VideoConstantNumber'
2014         language:
2015           $ref: '#/components/schemas/VideoConstantString'
2016         privacy:
2017           $ref: '#/components/schemas/VideoPrivacyConstant'
2018         description:
2019           type: string
2020         duration:
2021           type: number
2022         isLocal:
2023           type: boolean
2024         name:
2025           type: string
2026         thumbnailPath:
2027           type: string
2028         previewPath:
2029           type: string
2030         embedPath:
2031           type: string
2032         views:
2033           type: number
2034         likes:
2035           type: number
2036         dislikes:
2037           type: number
2038         nsfw:
2039           type: boolean
2040         waitTranscoding:
2041           type: boolean
2042           nullable: true
2043         state:
2044           $ref: '#/components/schemas/VideoStateConstant'
2045         scheduledUpdate:
2046           nullable: true
2047           $ref: '#/components/schemas/VideoScheduledUpdate'
2048         blacklisted:
2049           nullable: true
2050           type: boolean
2051         blacklistedReason:
2052           nullable: true
2053           type: string
2054         account:
2055           $ref: '#/components/schemas/VideoAccountSummary'
2056         channel:
2057           $ref: '#/components/schemas/VideoChannelSummary'
2058         userHistory:
2059           nullable: true
2060           type: object
2061           properties:
2062             currentTime:
2063               type: number
2064     VideoDetails:
2065       allOf:
2066         - $ref: '#/components/schemas/Video'
2067         - type: object
2068           properties:
2069             descriptionPath:
2070               type: string
2071             support:
2072               type: string
2073             channel:
2074               $ref: '#/components/schemas/VideoChannel'
2075             account:
2076               $ref: '#/components/schemas/Account'
2077             tags:
2078               type: array
2079               items:
2080                 type: string
2081             files:
2082               type: array
2083               items:
2084                 $ref: '#/components/schemas/VideoFile'
2085             commentsEnabled:
2086               type: boolean
2087             downloadEnabled:
2088               type: boolean
2089             trackerUrls:
2090               type: array
2091               items:
2092                 type: string
2093             streamingPlaylists:
2094               type: array
2095               items:
2096                 $ref: '#/components/schemas/VideoStreamingPlaylists'
2097     VideoImportStateConstant:
2098       properties:
2099         id:
2100           type: integer
2101           enum:
2102             - 1
2103             - 2
2104             - 3
2105           description: 'The video import state (Pending = 1, Success = 2, Failed = 3)'
2106         label:
2107           type: string
2108     VideoImport:
2109       properties:
2110         id:
2111           type: number
2112         targetUrl:
2113           type: string
2114         magnetUri:
2115           type: string
2116         torrentName:
2117           type: string
2118         state:
2119           type: object
2120           properties:
2121             id:
2122               $ref: '#/components/schemas/VideoImportStateConstant'
2123             label:
2124               type: string
2125         error:
2126           type: string
2127         createdAt:
2128           type: string
2129         updatedAt:
2130           type: string
2131         video:
2132           $ref: '#/components/schemas/Video'
2133     VideoAbuse:
2134       properties:
2135         id:
2136           type: number
2137         reason:
2138           type: string
2139         reporterAccount:
2140           $ref: '#/components/schemas/Account'
2141         video:
2142           type: object
2143           properties:
2144             id:
2145               type: number
2146             name:
2147               type: string
2148             uuid:
2149               type: string
2150             url:
2151               type: string
2152         createdAt:
2153           type: string
2154     VideoBlacklist:
2155       properties:
2156         id:
2157           type: number
2158         videoId:
2159           type: number
2160         createdAt:
2161           type: string
2162         updatedAt:
2163           type: string
2164         name:
2165           type: string
2166         uuid:
2167           type: string
2168         description:
2169           type: string
2170         duration:
2171           type: number
2172         views:
2173           type: number
2174         likes:
2175           type: number
2176         dislikes:
2177           type: number
2178         nsfw:
2179           type: boolean
2180     VideoChannel:
2181       properties:
2182         displayName:
2183           type: string
2184         description:
2185           type: string
2186         isLocal:
2187           type: boolean
2188         ownerAccount:
2189           type: object
2190           properties:
2191             id:
2192               type: number
2193             uuid:
2194               type: string
2195     VideoPlaylist:
2196       properties:
2197         id:
2198           type: number
2199         createdAt:
2200           type: string
2201         updatedAt:
2202           type: string
2203         description:
2204           type: string
2205         uuid:
2206           type: string
2207         displayName:
2208           type: string
2209         isLocal:
2210           type: boolean
2211         videoLength:
2212           type: number
2213         thumbnailPath:
2214           type: string
2215         privacy:
2216           type: object
2217           properties:
2218             id:
2219               type: number
2220             label:
2221               type: string
2222         type:
2223           type: object
2224           properties:
2225             id:
2226               type: number
2227             label:
2228               type: string
2229         ownerAccount:
2230           type: object
2231           properties:
2232             id:
2233               type: number
2234             name:
2235               type: string
2236             displayName:
2237               type: string
2238             url:
2239               type: string
2240             host:
2241               type: string
2242     VideoComment:
2243       properties:
2244         id:
2245           type: number
2246         url:
2247           type: string
2248         text:
2249           type: string
2250         threadId:
2251           type: number
2252         inReplyToCommentId:
2253           type: number
2254         videoId:
2255           type: number
2256         createdAt:
2257           type: string
2258         updatedAt:
2259           type: string
2260         totalRepliesFromVideoAuthor:
2261           type: number
2262         totalReplies:
2263           type: number
2264         account:
2265           $ref: '#/components/schemas/Account'
2266     VideoCommentThreadTree:
2267       properties:
2268         comment:
2269           $ref: '#/components/schemas/VideoComment'
2270         children:
2271           type: array
2272           items:
2273             $ref: '#/components/schemas/VideoCommentThreadTree'
2274     VideoCaption:
2275       properties:
2276         language:
2277           $ref: '#/components/schemas/VideoConstantString'
2278         captionPath:
2279           type: string
2280     Avatar:
2281       properties:
2282         path:
2283           type: string
2284         createdAt:
2285           type: string
2286         updatedAt:
2287           type: string
2288     Actor:
2289       properties:
2290         id:
2291           type: number
2292         url:
2293           type: string
2294         name:
2295           type: string
2296         host:
2297           type: string
2298         followingCount:
2299           type: number
2300         followersCount:
2301           type: number
2302         createdAt:
2303           type: string
2304         updatedAt:
2305           type: string
2306         avatar:
2307           $ref: '#/components/schemas/Avatar'
2308     Account:
2309       allOf:
2310         - $ref: '#/components/schemas/Actor'
2311         - properties:
2312             userId:
2313               type: string
2314             displayName:
2315               type: string
2316             description:
2317               type: string
2318     User:
2319       properties:
2320         id:
2321           type: number
2322         username:
2323           type: string
2324         email:
2325           type: string
2326         displayNSFW:
2327           type: boolean
2328         autoPlayVideo:
2329           type: boolean
2330         role:
2331           type: integer
2332           enum:
2333             - 0
2334             - 1
2335             - 2
2336           description: 'The user role (Admin = 0, Moderator = 1, User = 2)'
2337         roleLabel:
2338           type: string
2339           enum:
2340             - User
2341             - Moderator
2342             - Administrator
2343         videoQuota:
2344           type: number
2345         videoQuotaDaily:
2346           type: number
2347         createdAt:
2348           type: string
2349         account:
2350           $ref: '#/components/schemas/Account'
2351         videoChannels:
2352           type: array
2353           items:
2354             $ref: '#/components/schemas/VideoChannel'
2355     UserWatchingVideo:
2356       properties:
2357         currentTime:
2358           type: number
2359     ServerConfig:
2360       properties:
2361         instance:
2362           type: object
2363           properties:
2364             name:
2365               type: string
2366             shortDescription:
2367               type: string
2368             defaultClientRoute:
2369               type: string
2370             isNSFW:
2371               type: boolean
2372             defaultNSFWPolicy:
2373               type: string
2374             customizations:
2375               type: object
2376               properties:
2377                 javascript:
2378                   type: string
2379                 css:
2380                   type: string
2381         plugin:
2382           type: object
2383           properties:
2384             registered:
2385               type: array
2386               items:
2387                 type: string
2388         theme:
2389           type: object
2390           properties:
2391             registered:
2392               type: array
2393               items:
2394                 type: string
2395         email:
2396           type: object
2397           properties:
2398             enabled:
2399               type: boolean
2400         contactForm:
2401           type: object
2402           properties:
2403             enabled:
2404               type: boolean
2405         serverVersion:
2406           type: string
2407         serverCommit:
2408           type: string
2409         signup:
2410           type: object
2411           properties:
2412             allowed:
2413               type: boolean
2414             allowedForCurrentIP:
2415               type: boolean
2416             requiresEmailVerification:
2417               type: boolean
2418         transcoding:
2419           type: object
2420           properties:
2421             hls:
2422               type: object
2423               properties:
2424                 enabled:
2425                   type: boolean
2426             enabledResolutions:
2427               type: array
2428               items:
2429                 type: number
2430         import:
2431           type: object
2432           properties:
2433             videos:
2434               type: object
2435               properties:
2436                 http:
2437                   type: object
2438                   properties:
2439                     enabled:
2440                       type: boolean
2441                 torrent:
2442                   type: object
2443                   properties:
2444                     enabled:
2445                       type: boolean
2446         autoBlacklist:
2447           type: object
2448           properties:
2449             videos:
2450               type: object
2451               properties:
2452                 ofUsers:
2453                   type: object
2454                   properties:
2455                     enabled:
2456                       type: boolean
2457         avatar:
2458           type: object
2459           properties:
2460             file:
2461               type: object
2462               properties:
2463                 size:
2464                   type: object
2465                   properties:
2466                     max:
2467                       type: number
2468             extensions:
2469               type: array
2470               items:
2471                 type: string
2472         video:
2473           type: object
2474           properties:
2475             image:
2476               type: object
2477               properties:
2478                 extensions:
2479                   type: array
2480                   items:
2481                     type: string
2482                 size:
2483                   type: object
2484                   properties:
2485                     max:
2486                       type: number
2487             file:
2488               type: object
2489               properties:
2490                 extensions:
2491                   type: array
2492                   items:
2493                     type: string
2494         videoCaption:
2495           type: object
2496           properties:
2497             file:
2498               type: object
2499               properties:
2500                 size:
2501                   type: object
2502                   properties:
2503                     max:
2504                       type: number
2505                 extensions:
2506                   type: array
2507                   items:
2508                     type: string
2509         user:
2510           type: object
2511           properties:
2512             videoQuota:
2513               type: number
2514             videoQuotaDaily:
2515               type: number
2516         trending:
2517           type: object
2518           properties:
2519             videos:
2520               type: object
2521               properties:
2522                 intervalDays:
2523                   type: number
2524         tracker:
2525           type: object
2526           properties:
2527             enabled:
2528               type: boolean
2529     ServerConfigAbout:
2530       properties:
2531         instance:
2532           type: object
2533           properties:
2534             name:
2535               type: string
2536             shortDescription:
2537               type: string
2538             description:
2539               type: string
2540             terms:
2541               type: string
2542     ServerConfigCustom:
2543       properties:
2544         instance:
2545           type: object
2546           properties:
2547             name:
2548               type: string
2549             shortDescription:
2550               type: string
2551             description:
2552               type: string
2553             terms:
2554               type: string
2555             defaultClientRoute:
2556               type: string
2557             isNSFW:
2558               type: boolean
2559             defaultNSFWPolicy:
2560               type: string
2561             customizations:
2562               type: object
2563               properties:
2564                 javascript:
2565                   type: string
2566                 css:
2567                   type: string
2568         theme:
2569           type: object
2570           properties:
2571             default:
2572               type: string
2573         services:
2574           type: object
2575           properties:
2576             twitter:
2577               type: object
2578               properties:
2579                 username:
2580                   type: string
2581                 whitelisted:
2582                   type: boolean
2583         cache:
2584           type: object
2585           properties:
2586             previews:
2587               type: object
2588               properties:
2589                 size:
2590                   type: number
2591             captions:
2592               type: object
2593               properties:
2594                 size:
2595                   type: number
2596         signup:
2597           type: object
2598           properties:
2599             enabled:
2600               type: boolean
2601             limit:
2602               type: number
2603             requiresEmailVerification:
2604               type: boolean
2605         admin:
2606           type: object
2607           properties:
2608             email:
2609               type: string
2610         contactForm:
2611           type: object
2612           properties:
2613             enabled:
2614               type: boolean
2615         user:
2616           type: object
2617           properties:
2618             videoQuota:
2619               type: number
2620             videoQuotaDaily:
2621               type: number
2622         transcoding:
2623           type: object
2624           properties:
2625             enabled:
2626               type: boolean
2627             allowAdditionalExtensions:
2628               type: boolean
2629             allowAudioFiles:
2630               type: boolean
2631             threads:
2632               type: number
2633             resolutions:
2634               type: object
2635               properties:
2636                 240p:
2637                   type: boolean
2638                 360p:
2639                   type: boolean
2640                 480p:
2641                   type: boolean
2642                 720p:
2643                   type: boolean
2644                 1080p:
2645                   type: boolean
2646                 2160p:
2647                   type: boolean
2648             hls:
2649               type: object
2650               properties:
2651                 enabled:
2652                   type: boolean
2653         import:
2654           type: object
2655           properties:
2656             videos:
2657               type: object
2658               properties:
2659                 http:
2660                   type: object
2661                   properties:
2662                     enabled:
2663                       type: boolean
2664                 torrent:
2665                   type: object
2666                   properties:
2667                     enabled:
2668                       type: boolean
2669         autoBlacklist:
2670           type: object
2671           properties:
2672             videos:
2673               type: object
2674               properties:
2675                 ofUsers:
2676                   type: object
2677                   properties:
2678                     enabled:
2679                       type: boolean
2680         followers:
2681           type: object
2682           properties:
2683             instance:
2684               type: object
2685               properties:
2686                 enabled:
2687                   type: boolean
2688                 manualApproval:
2689                   type: boolean
2690     Follow:
2691       properties:
2692         id:
2693           type: number
2694         follower:
2695           $ref: '#/components/schemas/Actor'
2696         following:
2697           $ref: '#/components/schemas/Actor'
2698         score:
2699           type: number
2700         state:
2701           type: string
2702           enum:
2703             - pending
2704             - accepted
2705         createdAt:
2706           type: string
2707         updatedAt:
2708           type: string
2709     Job:
2710       properties:
2711         id:
2712           type: number
2713         state:
2714           type: string
2715           enum:
2716             - pending
2717             - processing
2718             - error
2719             - success
2720         category:
2721           type: string
2722           enum:
2723             - transcoding
2724             - activitypub-http
2725         handlerName:
2726           type: string
2727         handlerInputData:
2728           type: string
2729         createdAt:
2730           type: string
2731         updatedAt:
2732           type: string
2733     AddUserResponse:
2734       properties:
2735         id:
2736           type: number
2737         uuid:
2738           type: string
2739     VideoUploadResponse:
2740       properties:
2741         video:
2742           type: object
2743           properties:
2744             id:
2745               type: number
2746             uuid:
2747               type: string
2748     CommentThreadResponse:
2749       properties:
2750         total:
2751           type: number
2752         data:
2753           type: array
2754           items:
2755             $ref: '#/components/schemas/VideoComment'
2756     CommentThreadPostResponse:
2757       properties:
2758         comment:
2759           $ref: '#/components/schemas/VideoComment'
2760     VideoListResponse:
2761       properties:
2762         total:
2763           type: number
2764         data:
2765           type: array
2766           items:
2767             $ref: '#/components/schemas/Video'
2768     AddUser:
2769       properties:
2770         username:
2771           type: string
2772           description: 'The user username '
2773         password:
2774           type: string
2775           description: 'The user password '
2776         email:
2777           type: string
2778           description: 'The user email '
2779         videoQuota:
2780           type: string
2781           description: 'The user videoQuota '
2782         videoQuotaDaily:
2783           type: string
2784           description: 'The user daily video quota '
2785         role:
2786           type: integer
2787           enum:
2788             - 0
2789             - 1
2790             - 2
2791           description: 'The user role (Admin = 0, Moderator = 1, User = 2)'
2792       required:
2793         - username
2794         - password
2795         - email
2796         - videoQuota
2797         - videoQuotaDaily
2798         - role
2799     UpdateUser:
2800       properties:
2801         id:
2802           type: string
2803           description: 'The user id '
2804         email:
2805           type: string
2806           description: 'The updated email of the user '
2807         videoQuota:
2808           type: string
2809           description: 'The updated videoQuota of the user '
2810         videoQuotaDaily:
2811           type: string
2812           description: 'The updated daily video quota of the user '
2813         role:
2814           type: integer
2815           enum:
2816             - 0
2817             - 1
2818             - 2
2819           description: 'The user role (Admin = 0, Moderator = 1, User = 2)'
2820       required:
2821         - id
2822         - email
2823         - videoQuota
2824         - videoQuotaDaily
2825         - role
2826     UpdateMe:
2827       properties:
2828         password:
2829           type: string
2830           description: 'Your new password '
2831         email:
2832           type: string
2833           description: 'Your new email '
2834         displayNSFW:
2835           type: string
2836           description: 'Your new displayNSFW '
2837         autoPlayVideo:
2838           type: string
2839           description: 'Your new autoPlayVideo '
2840       required:
2841         - password
2842         - email
2843         - displayNSFW
2844         - autoPlayVideo
2845     GetMeVideoRating:
2846       properties:
2847         id:
2848           type: string
2849           description: 'Id of the video '
2850         rating:
2851           type: number
2852           description: 'Rating of the video '
2853       required:
2854         - id
2855         - rating
2856     VideoRating:
2857       properties:
2858         video:
2859           $ref: '#/components/schemas/Video'
2860         rating:
2861           type: number
2862           description: 'Rating of the video'
2863       required:
2864         - video
2865         - rating
2866     RegisterUser:
2867       properties:
2868         username:
2869           type: string
2870           description: 'The username of the user '
2871         password:
2872           type: string
2873           description: 'The password of the user '
2874         email:
2875           type: string
2876           description: 'The email of the user '
2877         displayName:
2878           type: string
2879           description: 'The user display name'
2880         channel:
2881           type: object
2882           properties:
2883             name:
2884               type: string
2885               description: 'The default channel name'
2886             displayName:
2887               type: string
2888               description: 'The default channel display name'
2889
2890       required:
2891         - username
2892         - password
2893         - email
2894     VideoChannelCreate:
2895       properties:
2896         name:
2897           type: string
2898         displayName:
2899           type: string
2900         description:
2901           type: string
2902         support:
2903           type: string
2904       required:
2905         - name
2906         - displayName
2907     VideoChannelUpdate:
2908       properties:
2909         displayName:
2910           type: string
2911         description:
2912           type: string
2913         support:
2914           type: string
2915         bulkVideosSupportUpdate:
2916           type: boolean
2917           description: 'Update all videos support field of this channel'
2918