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