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