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