Add ability to schedule video publication
[oweals/peertube.git] / support / doc / api / openapi.yaml
1 swagger: '2.0'
2 info:
3   title: PeerTube
4   version: 1.0.0-beta
5   description: Federated (ActivityPub) video streaming platform using P2P (BitTorrent) directly in the web browser with WebTorrent and Angular.
6 host: peertube.example.com
7 securityDefinitions:
8   OAuth2:
9     description: 'In the header: *Authorization: Bearer mytoken*'
10     type: oauth2
11     flow: password
12     # Not implemented yet
13     # authorizationUrl: https://example.com/oauth/authorize
14     tokenUrl: https://peertube.example.com/api/v1/users/token
15 basePath: '/api/v1'
16 schemes:
17   - https
18 paths:
19   '/accounts/{name}':
20     get:
21       tags:
22         - Accounts
23       consumes:
24         - application/json
25       produces:
26         - application/json
27       parameters:
28         - name: name
29           in: path
30           required: true
31           type: string
32           description: 'The name of the account (chocobozzz or chocobozzz@peertube.cpy.re for example)'
33         - name: start
34           in: query
35           required: false
36           type: number
37           description: 'starting page'
38         - name: stop
39           in: query
40           required: false
41           type: number
42           description: 'stopping page'
43         - name: sort
44           in: query
45           required: false
46           type: number
47           description: 'sorting'
48       responses:
49         '200':
50           description: successful operation
51           schema:
52             $ref: '#/definitions/Account'
53   '/accounts/{name}/videos':
54     get:
55       tags:
56         - Accounts
57       consumes:
58         - application/json
59       produces:
60         - application/json
61       parameters:
62         - name: name
63           in: path
64           required: true
65           type: string
66           description: 'The name of the account (chocobozzz or chocobozzz@peertube.cpy.re for example)'
67       responses:
68         '200':
69           description: successful operation
70           schema:
71             $ref: '#/definitions/Video'
72   /accounts:
73     get:
74       tags:
75         - Accounts
76       consumes:
77         - application/json
78       produces:
79         - application/json
80       responses:
81         '200':
82           description: successful operation
83           schema:
84             type: array
85             items:
86               $ref: '#/definitions/Account'
87   /config:
88     get:
89       tags:
90         - Config
91       consumes:
92         - application/json
93       produces:
94         - application/json
95       responses:
96         '200':
97           description: successful operation
98           schema:
99             $ref: '#/definitions/ServerConfig'
100   /feeds/videos.{format}:
101     get:
102       tags:
103         - Feeds
104       produces:
105         - application/atom+xml
106         - application/rss+xml
107         - application/json
108       parameters:
109         - name: format
110           in: path
111           required: true
112           type: string
113           enum: [ 'xml', 'atom', 'json']
114           default: 'xml'
115           description: 'The format expected (xml defaults to RSS 2.0, atom to ATOM 1.0 and json to JSON FEED 1.0'
116         - name: accountId
117           in: query
118           required: false
119           type: number
120           description: 'The id of the local account to filter to (beware, users IDs and not actors IDs which will return empty feeds'
121         - name: accountName
122           in: query
123           required: false
124           type: string
125           description: 'The name of the local account to filter to'
126       responses:
127         '200':
128           description: successful operation
129   /jobs:
130     get:
131       security:
132         - OAuth2: [ ]
133       tags:
134         - Job
135       consumes:
136         - application/json
137       produces:
138         - application/json
139       parameters:
140         - name: state
141           in: path
142           required: true
143           type: string
144           description: 'The id of the account'
145         - name: start
146           in: query
147           required: false
148           type: number
149           description: 'starting page'
150         - name: count
151           in: query
152           required: false
153           type: number
154           description: ''
155         - name: sort
156           in: query
157           required: false
158           type: number
159           description: 'sorting'
160       responses:
161         '200':
162           description: successful operation
163           schema:
164             type: array
165             items:
166               $ref: '#/definitions/Job'
167   '/server/following/{host}':
168     delete:
169       security:
170         - OAuth2: [ ]
171       tags:
172         - ServerFollowing
173       consumes:
174         - application/json
175       produces:
176         - application/json
177       parameters:
178         - name: host
179           in: path
180           required: true
181           type: string
182           description: 'The host to unfollow '
183       responses:
184         '201':
185           description: successful operation
186   /server/followers:
187     get:
188       tags:
189         - ServerFollowing
190       consumes:
191         - application/json
192       produces:
193         - application/json
194       parameters:
195         - name: start
196           in: query
197           required: false
198           type: number
199           description: 'starting page'
200         - name: stop
201           in: query
202           required: false
203           type: number
204           description: 'stopping page'
205         - name: sort
206           in: query
207           required: false
208           type: number
209           description: 'sorting'
210       responses:
211         '200':
212           description: successful operation
213           schema:
214             type: array
215             items:
216               $ref: '#/definitions/Follow'
217   /server/following:
218     get:
219       tags:
220         - ServerFollowing
221       consumes:
222         - application/json
223       produces:
224         - application/json
225       parameters:
226         - name: start
227           in: query
228           required: false
229           type: number
230           description: 'starting page'
231         - name: stop
232           in: query
233           required: false
234           type: number
235           description: 'stopping page'
236         - name: sort
237           in: query
238           required: false
239           type: number
240           description: 'sorting'
241       responses:
242         '200':
243           description: successful operation
244           schema:
245             type: array
246             items:
247               $ref: '#/definitions/Follow'
248     post:
249       security:
250         - OAuth2: [ ]
251       tags:
252         - ServerFollowing
253       consumes:
254         - application/json
255       produces:
256         - application/json
257       parameters:
258         - in: body
259           name: body
260           schema:
261             $ref: '#/definitions/Follow'
262       responses:
263         '204':
264           description: successful operation
265   /users:
266     post:
267       security:
268         - OAuth2: [ ]
269       tags:
270         - User
271       consumes:
272         - application/json
273       produces:
274         - application/json
275       parameters:
276         - in: body
277           name: body
278           required: true
279           description: 'User to create'
280           schema:
281             $ref: '#/definitions/AddUser'
282       responses:
283         '200':
284           description: successful operation
285           schema:
286             $ref: '#/definitions/AddUserResponse'
287     get:
288       security:
289         - OAuth2: [ ]
290       tags:
291         - User
292       consumes:
293         - application/json
294       produces:
295         - application/json
296       parameters:
297         - name: start
298           in: query
299           required: false
300           type: number
301           description: 'starting page'
302         - name: stop
303           in: query
304           required: false
305           type: number
306           description: 'stopping page'
307         - name: sort
308           in: query
309           required: false
310           type: number
311           description: 'sorting'
312       responses:
313         '200':
314           description: successful operation
315           schema:
316             type: array
317             items:
318               $ref: '#/definitions/User'
319   '/users/{id}':
320     delete:
321       security:
322         - OAuth2: [ ]
323       tags:
324         - User
325       consumes:
326         - application/json
327       produces:
328         - application/json
329       parameters:
330         - name: id
331           in: path
332           required: true
333           type: string
334           description: 'The user id '
335       responses:
336         '204':
337           description: successful operation
338     get:
339       security:
340         - OAuth2: [ ]
341       tags:
342         - User
343       consumes:
344         - application/json
345       produces:
346         - application/json
347       parameters:
348         - name: id
349           in: path
350           required: true
351           type: string
352           description: 'The user id '
353       responses:
354         '200':
355           description: successful operation
356           schema:
357             $ref: '#/definitions/User'
358     put:
359       security:
360         - OAuth2: [ ]
361       tags:
362         - User
363       consumes:
364         - application/json
365       produces:
366         - application/json
367       parameters:
368         - name: id
369           in: path
370           required: true
371           type: string
372           description: 'The user id '
373         - in: body
374           name: body
375           required: true
376           schema:
377             $ref: '#/definitions/UpdateUser'
378       responses:
379         '204':
380           description: successful operation
381   /users/me:
382     get:
383       security:
384         - OAuth2: [ ]
385       tags:
386         - User
387       consumes:
388         - application/json
389       produces:
390         - application/json
391       responses:
392         '200':
393           description: successful operation
394           schema:
395             type: array
396             items:
397               $ref: '#/definitions/User'
398     put:
399       security:
400         - OAuth2: [ ]
401       tags:
402         - User
403       consumes:
404         - application/json
405       produces:
406         - application/json
407       parameters:
408         - in: body
409           name: body
410           required: true
411           schema:
412             $ref: '#/definitions/UpdateMe'
413       responses:
414         '204':
415           description: successful operation
416   /users/me/video-quota-used:
417     get:
418       security:
419         - OAuth2: [ ]
420       tags:
421         - User
422       consumes:
423         - application/json
424       produces:
425         - application/json
426       parameters: []
427       responses:
428         '200':
429           description: successful operation
430           schema:
431             type: number
432   '/users/me/videos/{videoId}/rating':
433     get:
434       security:
435         - OAuth2: [ ]
436       tags:
437         - User
438       consumes:
439         - application/json
440       produces:
441         - application/json
442       parameters:
443         - name: videoId
444           in: path
445           required: true
446           type: string
447           description: 'The video id '
448       responses:
449         '200':
450           description: successful operation
451           schema:
452             $ref: '#/definitions/GetMeVideoRating'
453   /users/me/videos:
454     get:
455       security:
456         - OAuth2: [ ]
457       tags:
458         - User
459       consumes:
460         - application/json
461       produces:
462         - application/json
463       parameters:
464         - name: start
465           in: query
466           required: false
467           type: number
468           description: 'starting page'
469         - name: stop
470           in: query
471           required: false
472           type: number
473           description: 'stopping page'
474         - name: sort
475           in: query
476           required: false
477           type: number
478           description: 'sorting'
479       responses:
480         '200':
481           description: successful operation
482           schema:
483             type: array
484             items:
485               $ref: '#/definitions/Video'
486   /users/register:
487     post:
488       tags:
489         - User
490       consumes:
491         - application/json
492       produces:
493         - application/json
494       parameters:
495         - in: body
496           name: body
497           required: true
498           schema:
499             $ref: '#/definitions/RegisterUser'
500       responses:
501         '204':
502           description: successful operation
503   /users/me/avatar/pick:
504     post:
505       security:
506         - OAuth2: [ ]
507       tags:
508         - User
509       consumes:
510         - multipart/form-data
511       produces:
512         - application/json
513       parameters:
514         - in: formData
515           name: avatarfile
516           type: file
517           description: The file to upload.
518       responses:
519         '200':
520           description: successful operation
521           schema:
522             $ref: '#/definitions/Avatar'
523   /videos:
524     get:
525       tags:
526         - Video
527       consumes:
528         - application/json
529       produces:
530         - application/json
531       parameters:
532         - name: start
533           in: query
534           required: false
535           type: number
536           description: 'starting page'
537         - name: stop
538           in: query
539           required: false
540           type: number
541           description: 'stopping page'
542         - name: sort
543           in: query
544           required: false
545           type: number
546           description: 'sorting'
547       responses:
548         '200':
549           description: successful operation
550           schema:
551             type: array
552             items:
553               $ref: '#/definitions/Video'
554   /videos/categories:
555     get:
556       tags:
557         - Video
558       consumes:
559         - application/json
560       produces:
561         - application/json
562       responses:
563         '200':
564           description: successful operation
565           schema:
566             type: array
567             items:
568               type: string
569   /videos/licences:
570     get:
571       tags:
572         - Video
573       consumes:
574         - application/json
575       produces:
576         - application/json
577       responses:
578         '200':
579           description: successful operation
580           schema:
581             type: array
582             items:
583               type: string
584   /videos/languages:
585     get:
586       tags:
587         - Video
588       consumes:
589         - application/json
590       produces:
591         - application/json
592       responses:
593         '200':
594           description: successful operation
595           schema:
596             type: array
597             items:
598               type: string
599   /videos/privacies:
600     get:
601       tags:
602         - Video
603       consumes:
604         - application/json
605       produces:
606         - application/json
607       responses:
608         '200':
609           description: successful operation
610           schema:
611             type: array
612             items:
613               type: string
614   /videos/search:
615     get:
616       tags:
617         - Video
618       consumes:
619         - application/json
620       produces:
621         - application/json
622       parameters:
623         - name: start
624           in: query
625           required: false
626           type: number
627           description: 'starting page'
628         - name: stop
629           in: query
630           required: false
631           type: number
632           description: 'stopping page'
633         - name: sort
634           in: query
635           required: false
636           type: number
637           description: 'sorting'
638       responses:
639         '200':
640           description: successful operation
641           schema:
642             type: array
643             items:
644               $ref: '#/definitions/Video'
645   "/videos/{id}":
646     put:
647       security:
648         - OAuth2: [ ]
649       tags:
650         - Video
651       consumes:
652         - multipart/form-data
653       produces:
654         - application/json
655       parameters:
656         - name: id
657           in: path
658           required: true
659           type: string
660           description: 'The video id'
661         - name: thumbnailfile
662           in: formData
663           type: file
664           description: 'Video thumbnail file'
665         - name: previewfile
666           in: formData
667           type: file
668           description: 'Video preview file'
669         - name: category
670           in: formData
671           type: number
672           description: 'Video category'
673         - name: licence
674           in: formData
675           type: number
676           description: 'Video licence'
677         - name: language
678           in: formData
679           type: string
680           description: 'Video language'
681         - name: description
682           in: formData
683           type: string
684           description: 'Video description'
685         - name: waitTranscoding
686           in: formData
687           type: boolean
688           description: 'Whether or not we wait transcoding before publish the video'
689         - name: support
690           in: formData
691           type: string
692           description: 'Text describing how to support the video uploader'
693         - name: nsfw
694           in: formData
695           type: boolean
696           description: 'Whether or not this video contains sensitive content'
697         - name: name
698           in: formData
699           type: string
700           description: 'Video name'
701         - name: tags
702           in: formData
703           type: string[]
704           description: 'Video tags'
705         - name: commentsEnabled
706           in: formData
707           type: boolean
708           description: 'Enable or disable comments for this video'
709         - name: privacy
710           in: formData
711           type: string
712           enum: [Public, Unlisted]
713           description: 'Video privacy'
714         - name: scheduleUpdate
715           in: formData
716           required: false
717           description: 'Schedule an update at a specific datetime'
718           type:
719             $ref: '#/definitions/ScheduleVideoUpdate'
720       responses:
721         '200':
722           description: successful operation
723           schema:
724             $ref: '#/definitions/Video'
725     get:
726       tags:
727         - Video
728       consumes:
729         - application/json
730       produces:
731         - application/json
732       parameters:
733         - name: id
734           in: path
735           required: true
736           type: string
737           description: 'The video id '
738       responses:
739         '200':
740           description: successful operation
741           schema:
742             $ref: '#/definitions/Video'
743     delete:
744       security:
745         - OAuth2: [ ]
746       tags:
747         - Video
748       consumes:
749         - application/json
750       produces:
751         - application/json
752       parameters:
753         - name: id
754           in: path
755           required: true
756           type: string
757           description: 'The video id '
758       responses:
759         '204':
760           description: successful operation
761   "/videos/{id}/description":
762     get:
763       tags:
764         - Video
765       consumes:
766         - application/json
767       produces:
768         - application/json
769       parameters:
770         - name: id
771           in: path
772           required: true
773           type: string
774           description: 'The video id '
775       responses:
776         '200':
777           description: successful operation
778           schema:
779             type: string
780   "/videos/{id}/views":
781     post:
782       tags:
783         - Video
784       consumes:
785         - application/json
786       produces:
787         - application/json
788       parameters:
789         - name: id
790           in: path
791           required: true
792           type: string
793           description: 'The video id '
794       responses:
795         '204':
796           description: successful operation
797   /videos/upload:
798     post:
799       security:
800         - OAuth2: [ ]
801       tags:
802         - Video
803       consumes:
804         - multipart/form-data
805       produces:
806         - application/json
807       parameters:
808         - name: videofile
809           in: formData
810           type: file
811           required: true
812           description: 'Video file'
813         - name: thumbnailfile
814           in: formData
815           type: file
816           required: true
817           description: 'Video thumbnail file'
818         - name: previewfile
819           in: formData
820           type: file
821           required: true
822           description: 'Video preview file'
823         - name: category
824           in: formData
825           type: number
826           description: 'Video category'
827         - name: waitTranscoding
828           in: formData
829           type: boolean
830           description: 'Whether or not we wait transcoding before publish the video'
831         - name: licence
832           in: formData
833           type: number
834           description: 'Video licence'
835         - name: language
836           in: formData
837           type: string
838           description: 'Video language'
839         - name: description
840           in: formData
841           type: string
842           description: 'Video description'
843         - name: support
844           in: formData
845           type: string
846           description: 'Text describing how to support the video uploader'
847         - name: channelId
848           in: formData
849           required: true
850           type: number
851           description: 'Channel id that will contain this video'
852         - name: nsfw
853           in: formData
854           required: true
855           type: boolean
856           description: 'Whether or not this video contains sensitive content'
857         - name: name
858           in: formData
859           required: true
860           type: string
861           description: 'Video name'
862         - name: tags
863           in: formData
864           type: string[]
865           description: 'Video tags'
866         - name: commentsEnabled
867           in: formData
868           type: boolean
869           description: 'Enable or disable comments for this video'
870         - name: privacy
871           in: formData
872           required: true
873           type:
874             $ref: '#/definitions/VideoPrivacy'
875           description: 'Video privacy'
876         - name: scheduleUpdate
877           in: formData
878           required: false
879           description: 'Schedule an update at a specific datetime'
880           type:
881             $ref: '#/definitions/ScheduleVideoUpdate'
882       responses:
883         '200':
884           description: successful operation
885           schema:
886             $ref: '#/definitions/VideoUploadResponse'
887   /videos/abuse:
888     get:
889       security:
890         - OAuth2: [ ]
891       tags:
892         - VideoAbuse
893       consumes:
894         - application/json
895       produces:
896         - application/json
897       parameters:
898         - name: start
899           in: query
900           required: false
901           type: number
902           description: 'starting page'
903         - name: stop
904           in: query
905           required: false
906           type: number
907           description: 'stopping page'
908         - name: sort
909           in: query
910           required: false
911           type: number
912           description: 'sorting'
913       responses:
914         '200':
915           description: successful operation
916           schema:
917             type: array
918             items:
919               $ref: '#/definitions/VideoAbuse'
920   "/videos/{id}/abuse":
921     post:
922       security:
923         - OAuth2: [ ]
924       tags:
925         - VideoAbuse
926       consumes:
927         - application/json
928       produces:
929         - application/json
930       parameters:
931         - name: id
932           in: path
933           required: true
934           type: string
935           description: 'The video id '
936       responses:
937         '204':
938           description: successful operation
939   "/videos/{videoId}/blacklist":
940     post:
941       security:
942         - OAuth2: [ ]
943       tags:
944         - VideoBlacklist
945       consumes:
946         - application/json
947       produces:
948         - application/json
949       parameters:
950         - name: videoId
951           in: path
952           required: true
953           type: string
954           description: 'The video id '
955       responses:
956         '204':
957           description: successful operation
958     delete:
959       security:
960         - OAuth2: [ ]
961       tags:
962         - VideoBlacklist
963       consumes:
964         - application/json
965       produces:
966         - application/json
967       parameters:
968         - name: videoId
969           in: path
970           required: true
971           type: string
972           description: 'The video id '
973       responses:
974         '204':
975           description: successful operation
976   /videos/blacklist:
977     get:
978       security:
979         - OAuth2: [ ]
980       tags:
981         - VideoBlacklist
982       consumes:
983         - application/json
984       produces:
985         - application/json
986       parameters:
987         - name: start
988           in: query
989           required: false
990           type: number
991           description: 'starting page'
992         - name: stop
993           in: query
994           required: false
995           type: number
996           description: 'stopping page'
997         - name: sort
998           in: query
999           required: false
1000           type: number
1001           description: 'sorting'
1002       responses:
1003         '200':
1004           description: successful operation
1005           schema:
1006             type: array
1007             items:
1008               $ref: '#/definitions/VideoBlacklist'
1009   /video-channels:
1010     get:
1011       tags:
1012         - VideoChannel
1013       consumes:
1014         - application/json
1015       produces:
1016         - application/json
1017       parameters:
1018         - name: start
1019           in: query
1020           required: false
1021           type: number
1022           description: 'starting page'
1023         - name: stop
1024           in: query
1025           required: false
1026           type: number
1027           description: 'stopping page'
1028         - name: sort
1029           in: query
1030           required: false
1031           type: number
1032           description: 'sorting'
1033       responses:
1034         '200':
1035           description: successful operation
1036           schema:
1037             type: array
1038             items:
1039               $ref: '#/definitions/VideoChannel'
1040     post:
1041       security:
1042         - OAuth2: [ ]
1043       tags:
1044         - VideoChannel
1045       consumes:
1046         - application/json
1047       produces:
1048         - application/json
1049       parameters:
1050         - in: body
1051           name: body
1052           schema:
1053             $ref: '#/definitions/VideoChannelInput'
1054       responses:
1055         '204':
1056           description: successful operation
1057   "/video-channels/{id}":
1058     get:
1059       tags:
1060         - VideoChannel
1061       consumes:
1062         - application/json
1063       produces:
1064         - application/json
1065       parameters:
1066         - name: id
1067           in: path
1068           required: true
1069           type: string
1070           description: 'The video channel id '
1071       responses:
1072         '200':
1073           description: successful operation
1074           schema:
1075             $ref: '#/definitions/VideoChannel'
1076     put:
1077       security:
1078         - OAuth2: [ ]
1079       tags:
1080         - VideoChannel
1081       consumes:
1082         - application/json
1083       produces:
1084         - application/json
1085       parameters:
1086         - name: id
1087           in: path
1088           required: true
1089           type: string
1090           description: 'The video channel id '
1091         - in: body
1092           name: body
1093           schema:
1094             $ref: '#/definitions/VideoChannelInput'
1095       responses:
1096         '204':
1097           description: successful operation
1098     delete:
1099       security:
1100         - OAuth2: [ ]
1101       tags:
1102         - VideoChannel
1103       consumes:
1104         - application/json
1105       produces:
1106         - application/json
1107       parameters:
1108         - name: id
1109           in: path
1110           required: true
1111           type: string
1112           description: 'The video channel id '
1113       responses:
1114         '204':
1115           description: successful operation
1116   "/video-channels/{id}/videos":
1117     get:
1118       tags:
1119         - VideoChannel
1120       consumes:
1121         - application/json
1122       produces:
1123         - application/json
1124       parameters:
1125         - name: id
1126           in: path
1127           required: true
1128           type: string
1129           description: 'The video channel id '
1130       responses:
1131         '200':
1132           description: successful operation
1133           schema:
1134             $ref: '#/definitions/Video'
1135   /accounts/{name}/video-channels:
1136     get:
1137       tags:
1138         - VideoChannel
1139       consumes:
1140         - application/json
1141       produces:
1142         - application/json
1143       parameters:
1144         - name: name
1145           in: path
1146           required: true
1147           type: string
1148           description: 'The name of the account (chocobozzz or chocobozzz@peertube.cpy.re for example)'
1149       responses:
1150         '200':
1151           description: successful operation
1152           schema:
1153             type: array
1154             items:
1155               $ref: '#/definitions/VideoChannel'
1156   "/videos/{videoId}/comment-threads":
1157     get:
1158       tags:
1159         - VideoComment
1160       consumes:
1161         - application/json
1162       produces:
1163         - application/json
1164       parameters:
1165         - name: videoId
1166           in: path
1167           required: true
1168           type: string
1169           description: 'The video id '
1170         - name: start
1171           in: query
1172           required: false
1173           type: number
1174           description: 'starting page'
1175         - name: stop
1176           in: query
1177           required: false
1178           type: number
1179           description: 'stopping page'
1180         - name: sort
1181           in: query
1182           required: false
1183           type: number
1184           description: 'sorting'
1185       responses:
1186         '200':
1187           description: successful operation
1188           schema:
1189             $ref: '#/definitions/CommentThreadResponse'
1190     post:
1191       security:
1192         - OAuth2: [ ]
1193       tags:
1194         - VideoComment
1195       consumes:
1196         - application/json
1197       produces:
1198         - application/json
1199       parameters:
1200         - name: videoId
1201           in: path
1202           required: true
1203           type: string
1204           description: 'The video id '
1205       responses:
1206         '200':
1207           description: successful operation
1208           schema:
1209             $ref: '#/definitions/CommentThreadPostResponse'
1210   "/videos/{videoId}/comment-threads/{threadId}":
1211     get:
1212       tags:
1213         - VideoComment
1214       consumes:
1215         - application/json
1216       produces:
1217         - application/json
1218       parameters:
1219         - name: videoId
1220           in: path
1221           required: true
1222           type: string
1223           description: 'The video id '
1224         - name: threadId
1225           in: path
1226           required: true
1227           type: string
1228           description: 'The thread id '
1229       responses:
1230         '200':
1231           description: successful operation
1232           schema:
1233             $ref: '#/definitions/VideoCommentThreadTree'
1234   "/videos/{videoId}/comments/{commentId}":
1235     post:
1236       security:
1237         - OAuth2: [ ]
1238       tags:
1239         - VideoComment
1240       consumes:
1241         - application/json
1242       produces:
1243         - application/json
1244       parameters:
1245         - name: videoId
1246           in: path
1247           required: true
1248           type: string
1249           description: 'The video id '
1250         - name: commentId
1251           in: path
1252           required: true
1253           type: string
1254           description: 'The comment id '
1255       responses:
1256         '200':
1257           description: successful operation
1258           schema:
1259             $ref: '#/definitions/CommentThreadPostResponse'
1260     delete:
1261       security:
1262         - OAuth2: [ ]
1263       tags:
1264         - VideoComment
1265       consumes:
1266         - application/json
1267       produces:
1268         - application/json
1269       parameters:
1270         - name: videoId
1271           in: path
1272           required: true
1273           type: string
1274           description: 'The video id '
1275         - name: commentId
1276           in: path
1277           required: true
1278           type: string
1279           description: 'The comment id '
1280       responses:
1281         '204':
1282           description: successful operation
1283   "/videos/{id}/rate":
1284     put:
1285       security:
1286         - OAuth2: [ ]
1287       tags:
1288         - VideoRate
1289       consumes:
1290         - application/json
1291       produces:
1292         - application/json
1293       parameters:
1294         - name: id
1295           in: path
1296           required: true
1297           type: string
1298           description: 'The video id '
1299       responses:
1300         '204':
1301           description: successful operation
1302 definitions:
1303   VideoConstantNumber:
1304     properties:
1305       id:
1306         type: number
1307       label:
1308         type: string
1309   VideoConstantString:
1310     properties:
1311       id:
1312         type: string
1313       label:
1314         type: string
1315   VideoPrivacy:
1316     type: string
1317     enum: [Public, Unlisted, Private]
1318   Video:
1319     properties:
1320       id:
1321         type: number
1322       uuid:
1323         type: string
1324       createdAt:
1325         type: string
1326       publishedAt:
1327         type: string
1328       updatedAt:
1329         type: string
1330       category:
1331         $ref: "#/definitions/VideoConstantNumber"
1332       licence:
1333         $ref: "#/definitions/VideoConstantNumber"
1334       language:
1335         $ref: "#/definitions/VideoConstantString"
1336       privacy:
1337         $ref: "#/definitions/VideoPrivacy"
1338       description:
1339         type: string
1340       duration:
1341         type: number
1342       isLocal:
1343         type: boolean
1344       name:
1345         type: string
1346       thumbnailPath:
1347         type: string
1348       previewPath:
1349         type: string
1350       embedPath:
1351         type: string
1352       views:
1353         type: number
1354       likes:
1355         type: number
1356       dislikes:
1357         type: number
1358       nsfw:
1359         type: boolean
1360       account:
1361         type: object
1362         properties:
1363           name:
1364             type: string
1365           displayName:
1366             type: string
1367           url:
1368             type: string
1369           host:
1370             type: string
1371           avatar:
1372             $ref: "#/definitions/Avatar"
1373   VideoAbuse:
1374     properties:
1375       id:
1376         type: number
1377       reason:
1378         type: string
1379       reporterAccount:
1380         $ref: "#/definitions/Account"
1381       video:
1382         type: object
1383         properties:
1384           id:
1385             type: number
1386           name:
1387             type: string
1388           uuid:
1389             type: string
1390           url:
1391             type: string
1392       createdAt:
1393         type: string
1394   VideoBlacklist:
1395     properties:
1396       id:
1397         type: number
1398       videoId:
1399         type: number
1400       createdAt:
1401         type: string
1402       updatedAt:
1403         type: string
1404       name:
1405         type: string
1406       uuid:
1407         type: string
1408       description:
1409         type: string
1410       duration:
1411         type: number
1412       views:
1413         type: number
1414       likes:
1415         type: number
1416       dislikes:
1417         type: number
1418       nsfw:
1419         type: boolean
1420   VideoChannel:
1421     properties:
1422       displayName:
1423         type: string
1424       description:
1425         type: string
1426       isLocal:
1427         type: boolean
1428       ownerAccount:
1429         type: object
1430         properties:
1431           id:
1432             type: number
1433           uuid:
1434             type: string
1435   VideoComment:
1436     properties:
1437       id:
1438         type: number
1439       url:
1440         type: string
1441       text:
1442         type: string
1443       threadId:
1444         type: number
1445       inReplyToCommentId:
1446         type: number
1447       videoId:
1448         type: number
1449       createdAt:
1450         type: string
1451       updatedAt:
1452         type: string
1453       totalReplies:
1454         type: number
1455       account:
1456         $ref: "#/definitions/Account"
1457   VideoCommentThreadTree:
1458     properties:
1459       comment:
1460         $ref: "#/definitions/VideoComment"
1461       children:
1462         type: array
1463         items:
1464           $ref: "#/definitions/VideoCommentThreadTree"
1465   Avatar:
1466     properties:
1467       path:
1468         type: string
1469       createdAt:
1470         type: string
1471       updatedAt:
1472         type: string
1473   Actor:
1474     properties:
1475       id:
1476         type: number
1477       uuid:
1478         type: string
1479       url:
1480         type: string
1481       name:
1482         type: string
1483       host:
1484         type: string
1485       followingCount:
1486         type: number
1487       followersCount:
1488         type: number
1489       createdAt:
1490         type: string
1491       updatedAt:
1492         type: string
1493       avatar:
1494         $ref: "#/definitions/Avatar"
1495   Account:
1496     allOf:
1497       - $ref: "#/definitions/Actor"
1498       - properties:
1499           displayName:
1500             type: string
1501   User:
1502     properties:
1503       id:
1504         type: number
1505       username:
1506         type: string
1507       email:
1508         type: string
1509       displayNSFW:
1510         type: boolean
1511       autoPlayVideo:
1512         type: boolean
1513       role:
1514         type: string
1515         enum: [User, Moderator, Administrator]
1516       videoQuota:
1517         type: number
1518       createdAt:
1519         type: string
1520       account:
1521         $ref: "#/definitions/Account"
1522       videoChannels:
1523         type:  array
1524         items:
1525           $ref: "#/definitions/VideoChannel"
1526   ServerConfig:
1527     properties:
1528       signup:
1529         type: object
1530         properties:
1531           allowed:
1532             type: boolean
1533       transcoding:
1534         type: object
1535         properties:
1536           enabledResolutions:
1537             type: array
1538             items:
1539               type: number
1540       avatar:
1541         type: object
1542         properties:
1543           file:
1544             type: object
1545             properties:
1546               size:
1547                 type: object
1548                 properties:
1549                   max:
1550                     type: number
1551           extensions:
1552             type: array
1553             items:
1554               type: string
1555       video:
1556         type: object
1557         properties:
1558           file:
1559             type: object
1560             properties:
1561               extensions:
1562                 type: array
1563                 items:
1564                   type: string
1565   Follow:
1566     properties:
1567       id:
1568         type: number
1569       follower:
1570         $ref: "#/definitions/Actor"
1571       following:
1572         $ref: "#/definitions/Actor"
1573       score:
1574         type: number
1575       state:
1576         type: string
1577         enum: [pending, accepted]
1578       createdAt:
1579         type: string
1580       updatedAt:
1581         type: string
1582   Job:
1583     properties:
1584       id:
1585         type: number
1586       state:
1587         type: string
1588         enum: [pending, processing, error, success]
1589       category:
1590         type: string
1591         enum: [transcoding, activitypub-http]
1592       handlerName:
1593         type: string
1594       handlerInputData:
1595         type: string
1596       createdAt:
1597         type: string
1598       updatedAt:
1599         type: string
1600
1601 # Api responses
1602   AddUserResponse:
1603     properties:
1604       id:
1605         type: number
1606       uuid:
1607         type: string
1608   VideoUploadResponse:
1609     properties:
1610       video:
1611         type: object
1612         properties:
1613           id:
1614             type: number
1615           uuid:
1616             type: string
1617   CommentThreadResponse:
1618     properties:
1619       total:
1620         type: number
1621       data:
1622         type: array
1623         items:
1624           $ref: "#/definitions/VideoComment"
1625   CommentThreadPostResponse:
1626     properties:
1627       comment:
1628         $ref: "#/definitions/VideoComment"
1629
1630 # Request bodies
1631   AddUser:
1632     properties:
1633       username:
1634         type: string
1635         description: 'The user username '
1636       password:
1637         type: string
1638         description: 'The user password '
1639       email:
1640         type: string
1641         description: 'The user email '
1642       videoQuota:
1643         type: string
1644         description: 'The user videoQuota '
1645       role:
1646         type: string
1647         description: 'The user role '
1648     required:
1649       - username
1650       - password
1651       - email
1652       - videoQuota
1653       - role
1654   UpdateUser:
1655     properties:
1656       id:
1657         type: string
1658         description: 'The user id '
1659       email:
1660         type: string
1661         description: 'The updated email of the user '
1662       videoQuota:
1663         type: string
1664         description: 'The updated videoQuota of the user '
1665       role:
1666         type: string
1667         description: 'The updated role of the user '
1668     required:
1669       - id
1670       - email
1671       - videoQuota
1672       - role
1673   UpdateMe:
1674     properties:
1675       password:
1676         type: string
1677         description: 'Your new password '
1678       email:
1679         type: string
1680         description: 'Your new email '
1681       displayNSFW:
1682         type: string
1683         description: 'Your new displayNSFW '
1684       autoPlayVideo:
1685         type: string
1686         description: 'Your new autoPlayVideo '
1687     required:
1688       - password
1689       - email
1690       - displayNSFW
1691       - autoPlayVideo
1692   GetMeVideoRating:
1693     properties:
1694       id:
1695         type: string
1696         description: 'Id of the video '
1697       rating:
1698         type: number
1699         description: 'Rating of the video '
1700     required:
1701       - id
1702       - rating
1703   RegisterUser:
1704     properties:
1705       username:
1706         type: string
1707         description: 'The username of the user '
1708       password:
1709         type: string
1710         description: 'The password of the user '
1711       email:
1712         type: string
1713         description: 'The email of the user '
1714     required:
1715       - username
1716       - password
1717       - email
1718   VideoChannelInput:
1719     properties:
1720       name:
1721         type: string
1722       description:
1723         type: string
1724   ScheduleVideoUpdate:
1725     properties:
1726       updateAt:
1727         type: dateTime
1728         description: 'When to update the video'
1729         required: true
1730       privacy:
1731         $ref: '#/definitions/VideoPrivacy'
1732         required: false