diff options
Diffstat (limited to 'support')
-rw-r--r-- | support/doc/api/openapi.yaml | 964 |
1 files changed, 743 insertions, 221 deletions
diff --git a/support/doc/api/openapi.yaml b/support/doc/api/openapi.yaml index 0e0d2ab5f..61fd6c95a 100644 --- a/support/doc/api/openapi.yaml +++ b/support/doc/api/openapi.yaml | |||
@@ -4,12 +4,12 @@ info: | |||
4 | version: 3.2.0-rc.1 | 4 | version: 3.2.0-rc.1 |
5 | contact: | 5 | contact: |
6 | name: PeerTube Community | 6 | name: PeerTube Community |
7 | url: 'https://joinpeertube.org' | 7 | url: https://joinpeertube.org |
8 | license: | 8 | license: |
9 | name: AGPLv3.0 | 9 | name: AGPLv3.0 |
10 | url: 'https://github.com/Chocobozzz/PeerTube/blob/master/LICENSE' | 10 | url: https://github.com/Chocobozzz/PeerTube/blob/master/LICENSE |
11 | x-logo: | 11 | x-logo: |
12 | url: 'https://joinpeertube.org/img/brand.png' | 12 | url: https://joinpeertube.org/img/brand.png |
13 | altText: PeerTube Project Homepage | 13 | altText: PeerTube Project Homepage |
14 | description: | | 14 | description: | |
15 | The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite | 15 | The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite |
@@ -27,8 +27,8 @@ info: | |||
27 | # Authentication | 27 | # Authentication |
28 | 28 | ||
29 | When you sign up for an account on a PeerTube instance, you are given the possibility | 29 | When you sign up for an account on a PeerTube instance, you are given the possibility |
30 | to generate sessions on it, and authenticate there using a session token. Only __one | 30 | to generate sessions on it, and authenticate there using an access token. Only __one |
31 | session token can currently be used at a time__. | 31 | access token can currently be used at a time__. |
32 | 32 | ||
33 | ## Roles | 33 | ## Roles |
34 | 34 | ||
@@ -38,41 +38,60 @@ info: | |||
38 | # Errors | 38 | # Errors |
39 | 39 | ||
40 | The API uses standard HTTP status codes to indicate the success or failure | 40 | The API uses standard HTTP status codes to indicate the success or failure |
41 | of the API call. The body of the response will be JSON in the following | 41 | of the API call. |
42 | formats. | ||
43 | 42 | ||
44 | ``` | 43 | ``` |
44 | HTTP 1.1 404 Not Found | ||
45 | Content-Type: application/json | ||
46 | |||
45 | { | 47 | { |
46 | "error": "Account not found" // error debug message | 48 | "errorCode": 1 |
49 | "error": "Account not found" | ||
47 | } | 50 | } |
48 | ``` | 51 | ``` |
49 | 52 | ||
50 | Some errors benefit from a more detailed message: | 53 | We provide error codes for [a growing number of cases](https://github.com/Chocobozzz/PeerTube/blob/develop/shared/models/server/server-error-code.enum.ts), |
54 | but it is still optional. | ||
55 | |||
56 | ### Validation errors | ||
57 | |||
58 | Each parameter is evaluated on its own against a set of rules before the route validator | ||
59 | proceeds with potential testing involving parameter combinations. Errors coming from Validation | ||
60 | errors appear earlier and benefit from a more detailed error type: | ||
61 | |||
51 | ``` | 62 | ``` |
63 | HTTP 1.1 400 Bad Request | ||
64 | Content-Type: application/json | ||
65 | |||
52 | { | 66 | { |
53 | "errors": { | 67 | "errors": { |
54 | "id": { // where 'id' is the name of the parameter concerned by the error. | 68 | "id": { |
55 | "value": "a117eb-c6a9-4756-bb09-2a956239f", // value that triggered the error. | 69 | "value": "a117eb-c6a9-4756-bb09-2a956239f", |
56 | "msg": "Should have an valid id", // error debug message | 70 | "msg": "Should have a valid id", |
57 | "param": "id", | 71 | "param": "id", |
58 | "location": "params" // 'params', 'body', 'header', 'query' or 'cookies' | 72 | "location": "params" |
59 | } | 73 | } |
60 | } | 74 | } |
61 | } | 75 | } |
62 | ``` | 76 | ``` |
63 | 77 | ||
78 | Where `id` is the name of the field concerned by the error, within the route definition. | ||
79 | `errors.<field>.location` can be either 'params', 'body', 'header', 'query' or 'cookies', and | ||
80 | `errors.<field>.value` reports the value that didn't pass validation whose `errors.<field>.msg` | ||
81 | is about. | ||
82 | |||
64 | # Rate limits | 83 | # Rate limits |
65 | 84 | ||
66 | We are rate-limiting all endpoints of PeerTube's API. Custom values can be set by administrators: | 85 | We are rate-limiting all endpoints of PeerTube's API. Custom values can be set by administrators: |
67 | 86 | ||
68 | | Endpoint | Calls | Time frame | | 87 | | Endpoint (prefix: `/api/v1`) | Calls | Time frame | |
69 | |-------------------------|------------------|---------------------------| | 88 | |------------------------------|---------------|--------------| |
70 | | `/*` | 50 | 10 seconds | | 89 | | `/*` | 50 | 10 seconds | |
71 | | `POST /users/token` | 15 | 5 minutes | | 90 | | `POST /users/token` | 15 | 5 minutes | |
72 | | `POST /users/register` | 2¹ | 5 minutes | | 91 | | `POST /users/register` | 2<sup>*</sup> | 5 minutes | |
73 | | `POST /users/ask-send-verify-email` | 3 | 5 minutes | | 92 | | `POST /users/ask-send-verify-email` | 3 | 5 minutes | |
74 | 93 | ||
75 | Depending on the endpoint, ¹failed requests are not taken into account. A service | 94 | Depending on the endpoint, <sup>*</sup>failed requests are not taken into account. A service |
76 | limit is announced by a `429 Too Many Requests` status code. | 95 | limit is announced by a `429 Too Many Requests` status code. |
77 | 96 | ||
78 | You can get details about the current state of your rate limit by reading the | 97 | You can get details about the current state of your rate limit by reading the |
@@ -80,13 +99,37 @@ info: | |||
80 | 99 | ||
81 | | Header | Description | | 100 | | Header | Description | |
82 | |-------------------------|------------------------------------------------------------| | 101 | |-------------------------|------------------------------------------------------------| |
83 | | X-RateLimit-Limit | Number of max requests allowed in the current time period | | 102 | | `X-RateLimit-Limit` | Number of max requests allowed in the current time period | |
84 | | X-RateLimit-Remaining | Number of remaining requests in the current time period | | 103 | | `X-RateLimit-Remaining` | Number of remaining requests in the current time period | |
85 | | X-RateLimit-Reset | Timestamp of end of current time period as UNIX timestamp | | 104 | | `X-RateLimit-Reset` | Timestamp of end of current time period as UNIX timestamp | |
86 | | Retry-After | Seconds to delay after the first `429` is received | | 105 | | `Retry-After` | Seconds to delay after the first `429` is received | |
106 | |||
107 | # CORS | ||
108 | |||
109 | This API features [Cross-Origin Resource Sharing (CORS)](https://fetch.spec.whatwg.org/), | ||
110 | allowing cross-domain communication from the browser for some routes: | ||
111 | |||
112 | | Endpoint | | ||
113 | |------------------------- ---| | ||
114 | | `/api/*` | | ||
115 | | `/download/*` | | ||
116 | | `/lazy-static/*` | | ||
117 | | `/live/segments-sha256/*` | | ||
118 | | `/.well-known/webfinger` | | ||
119 | |||
120 | In addition, all routes serving ActivityPub are CORS-enabled for all origins. | ||
87 | externalDocs: | 121 | externalDocs: |
88 | url: https://docs.joinpeertube.org/api-rest-reference.html | 122 | url: https://docs.joinpeertube.org/api-rest-reference.html |
89 | tags: | 123 | tags: |
124 | - name: Register | ||
125 | description: | | ||
126 | As a visitor, you can use this API to open an account (if registrations are open on | ||
127 | that PeerTube instance). As an admin, you should use the dedicated [User creation | ||
128 | API](#operation/createUser) instead. | ||
129 | - name: Session | ||
130 | x-displayName: Login/Logout | ||
131 | description: | | ||
132 | Sessions deal with access tokens over time. Only __one session token can currently be used at a time__. | ||
90 | - name: Accounts | 133 | - name: Accounts |
91 | description: > | 134 | description: > |
92 | Accounts encompass remote accounts discovered across the federation, | 135 | Accounts encompass remote accounts discovered across the federation, |
@@ -210,6 +253,10 @@ tags: | |||
210 | 253 | ||
211 | For importing videos as your own, refer to [video imports](#operation/importVideo). | 254 | For importing videos as your own, refer to [video imports](#operation/importVideo). |
212 | x-tagGroups: | 255 | x-tagGroups: |
256 | - name: Auth | ||
257 | tags: | ||
258 | - Register | ||
259 | - Session | ||
213 | - name: Accounts | 260 | - name: Accounts |
214 | tags: | 261 | tags: |
215 | - Accounts | 262 | - Accounts |
@@ -255,6 +302,7 @@ paths: | |||
255 | tags: | 302 | tags: |
256 | - Accounts | 303 | - Accounts |
257 | summary: Get an account | 304 | summary: Get an account |
305 | operationId: getAccount | ||
258 | parameters: | 306 | parameters: |
259 | - $ref: '#/components/parameters/name' | 307 | - $ref: '#/components/parameters/name' |
260 | responses: | 308 | responses: |
@@ -266,12 +314,14 @@ paths: | |||
266 | $ref: '#/components/schemas/Account' | 314 | $ref: '#/components/schemas/Account' |
267 | '404': | 315 | '404': |
268 | description: account not found | 316 | description: account not found |
317 | |||
269 | '/accounts/{name}/videos': | 318 | '/accounts/{name}/videos': |
270 | get: | 319 | get: |
271 | tags: | 320 | tags: |
272 | - Accounts | 321 | - Accounts |
273 | - Video | 322 | - Video |
274 | summary: 'List videos of an account' | 323 | summary: 'List videos of an account' |
324 | operationId: getAccountVideos | ||
275 | parameters: | 325 | parameters: |
276 | - $ref: '#/components/parameters/name' | 326 | - $ref: '#/components/parameters/name' |
277 | - $ref: '#/components/parameters/categoryOneOf' | 327 | - $ref: '#/components/parameters/categoryOneOf' |
@@ -327,11 +377,13 @@ paths: | |||
327 | json = r.json() | 377 | json = r.json() |
328 | 378 | ||
329 | print(json) | 379 | print(json) |
380 | |||
330 | /accounts: | 381 | /accounts: |
331 | get: | 382 | get: |
332 | tags: | 383 | tags: |
333 | - Accounts | 384 | - Accounts |
334 | summary: List accounts | 385 | summary: List accounts |
386 | operationId: getAccounts | ||
335 | parameters: | 387 | parameters: |
336 | - $ref: '#/components/parameters/start' | 388 | - $ref: '#/components/parameters/start' |
337 | - $ref: '#/components/parameters/count' | 389 | - $ref: '#/components/parameters/count' |
@@ -345,11 +397,13 @@ paths: | |||
345 | type: array | 397 | type: array |
346 | items: | 398 | items: |
347 | $ref: '#/components/schemas/Account' | 399 | $ref: '#/components/schemas/Account' |
400 | |||
348 | /config: | 401 | /config: |
349 | get: | 402 | get: |
350 | tags: | 403 | tags: |
351 | - Config | 404 | - Config |
352 | summary: Get instance public configuration | 405 | summary: Get instance public configuration |
406 | operationId: getConfig | ||
353 | responses: | 407 | responses: |
354 | '200': | 408 | '200': |
355 | description: successful operation | 409 | description: successful operation |
@@ -360,9 +414,11 @@ paths: | |||
360 | examples: | 414 | examples: |
361 | nightly: | 415 | nightly: |
362 | externalValue: https://peertube2.cpy.re/api/v1/config | 416 | externalValue: https://peertube2.cpy.re/api/v1/config |
417 | |||
363 | /config/about: | 418 | /config/about: |
364 | get: | 419 | get: |
365 | summary: Get instance "About" information | 420 | summary: Get instance "About" information |
421 | operationId: getAbout | ||
366 | tags: | 422 | tags: |
367 | - Config | 423 | - Config |
368 | responses: | 424 | responses: |
@@ -375,9 +431,11 @@ paths: | |||
375 | examples: | 431 | examples: |
376 | nightly: | 432 | nightly: |
377 | externalValue: https://peertube2.cpy.re/api/v1/config/about | 433 | externalValue: https://peertube2.cpy.re/api/v1/config/about |
434 | |||
378 | /config/custom: | 435 | /config/custom: |
379 | get: | 436 | get: |
380 | summary: Get instance runtime configuration | 437 | summary: Get instance runtime configuration |
438 | operationId: getCustomConfig | ||
381 | tags: | 439 | tags: |
382 | - Config | 440 | - Config |
383 | security: | 441 | security: |
@@ -392,6 +450,7 @@ paths: | |||
392 | $ref: '#/components/schemas/ServerConfigCustom' | 450 | $ref: '#/components/schemas/ServerConfigCustom' |
393 | put: | 451 | put: |
394 | summary: Set instance runtime configuration | 452 | summary: Set instance runtime configuration |
453 | operationId: putCustomConfig | ||
395 | tags: | 454 | tags: |
396 | - Config | 455 | - Config |
397 | security: | 456 | security: |
@@ -408,6 +467,7 @@ paths: | |||
408 | - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled | 467 | - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled |
409 | delete: | 468 | delete: |
410 | summary: Delete instance runtime configuration | 469 | summary: Delete instance runtime configuration |
470 | operationId: delCustomConfig | ||
411 | tags: | 471 | tags: |
412 | - Config | 472 | - Config |
413 | security: | 473 | security: |
@@ -416,9 +476,11 @@ paths: | |||
416 | responses: | 476 | responses: |
417 | '200': | 477 | '200': |
418 | description: successful operation | 478 | description: successful operation |
479 | |||
419 | /jobs/{state}: | 480 | /jobs/{state}: |
420 | get: | 481 | get: |
421 | summary: List instance jobs | 482 | summary: List instance jobs |
483 | operationId: getJobs | ||
422 | security: | 484 | security: |
423 | - OAuth2: | 485 | - OAuth2: |
424 | - admin | 486 | - admin |
@@ -458,66 +520,108 @@ paths: | |||
458 | maxItems: 100 | 520 | maxItems: 100 |
459 | items: | 521 | items: |
460 | $ref: '#/components/schemas/Job' | 522 | $ref: '#/components/schemas/Job' |
461 | '/server/following/{host}': | 523 | |
524 | /server/followers: | ||
525 | get: | ||
526 | tags: | ||
527 | - Instance Follows | ||
528 | summary: List instances following the server | ||
529 | parameters: | ||
530 | - $ref: '#/components/parameters/followState' | ||
531 | - $ref: '#/components/parameters/actorType' | ||
532 | - $ref: '#/components/parameters/start' | ||
533 | - $ref: '#/components/parameters/count' | ||
534 | - $ref: '#/components/parameters/sort' | ||
535 | responses: | ||
536 | '200': | ||
537 | description: successful operation | ||
538 | content: | ||
539 | application/json: | ||
540 | schema: | ||
541 | type: object | ||
542 | properties: | ||
543 | total: | ||
544 | type: integer | ||
545 | example: 1 | ||
546 | data: | ||
547 | type: array | ||
548 | items: | ||
549 | $ref: '#/components/schemas/Follow' | ||
550 | |||
551 | '/server/followers/{nameWithHost}': | ||
462 | delete: | 552 | delete: |
553 | summary: Remove or reject a follower to your server | ||
463 | security: | 554 | security: |
464 | - OAuth2: | 555 | - OAuth2: |
465 | - admin | 556 | - admin |
466 | tags: | 557 | tags: |
467 | - Instance Follows | 558 | - Instance Follows |
468 | summary: Unfollow a server | ||
469 | parameters: | 559 | parameters: |
470 | - name: host | 560 | - name: nameWithHost |
471 | in: path | 561 | in: path |
472 | required: true | 562 | required: true |
473 | description: 'The host to unfollow ' | 563 | description: The remote actor handle to remove from your followers |
474 | schema: | 564 | schema: |
475 | type: string | 565 | type: string |
476 | format: hostname | 566 | format: email |
477 | responses: | 567 | responses: |
478 | '201': | 568 | '204': |
479 | description: successful operation | 569 | description: successful operation |
480 | /server/followers: | 570 | '404': |
481 | get: | 571 | description: follower not found |
572 | |||
573 | '/server/followers/{nameWithHost}/reject': | ||
574 | post: | ||
575 | summary: Reject a pending follower to your server | ||
576 | security: | ||
577 | - OAuth2: | ||
578 | - admin | ||
482 | tags: | 579 | tags: |
483 | - Instance Follows | 580 | - Instance Follows |
484 | summary: List instance followers | ||
485 | parameters: | 581 | parameters: |
486 | - $ref: '#/components/parameters/start' | 582 | - name: nameWithHost |
487 | - $ref: '#/components/parameters/count' | 583 | in: path |
488 | - $ref: '#/components/parameters/sort' | 584 | required: true |
585 | description: The remote actor handle to remove from your followers | ||
586 | schema: | ||
587 | type: string | ||
588 | format: email | ||
489 | responses: | 589 | responses: |
490 | '200': | 590 | '204': |
491 | description: successful operation | 591 | description: successful operation |
492 | content: | 592 | '404': |
493 | application/json: | 593 | description: follower not found |
494 | schema: | 594 | |
495 | type: array | 595 | '/server/followers/{nameWithHost}/accept': |
496 | items: | 596 | post: |
497 | $ref: '#/components/schemas/Follow' | 597 | summary: Accept a pending follower to your server |
598 | security: | ||
599 | - OAuth2: | ||
600 | - admin | ||
601 | tags: | ||
602 | - Instance Follows | ||
603 | parameters: | ||
604 | - name: nameWithHost | ||
605 | in: path | ||
606 | required: true | ||
607 | description: The remote actor handle to remove from your followers | ||
608 | schema: | ||
609 | type: string | ||
610 | format: email | ||
611 | responses: | ||
612 | '204': | ||
613 | description: successful operation | ||
614 | '404': | ||
615 | description: follower not found | ||
616 | |||
498 | /server/following: | 617 | /server/following: |
499 | get: | 618 | get: |
500 | tags: | 619 | tags: |
501 | - Instance Follows | 620 | - Instance Follows |
502 | summary: List instances followed by the server | 621 | summary: List instances followed by the server |
503 | parameters: | 622 | parameters: |
504 | - name: state | 623 | - $ref: '#/components/parameters/followState' |
505 | in: query | 624 | - $ref: '#/components/parameters/actorType' |
506 | schema: | ||
507 | type: string | ||
508 | enum: | ||
509 | - pending | ||
510 | - accepted | ||
511 | - name: actorType | ||
512 | in: query | ||
513 | schema: | ||
514 | type: string | ||
515 | enum: | ||
516 | - Person | ||
517 | - Application | ||
518 | - Group | ||
519 | - Service | ||
520 | - Organization | ||
521 | - $ref: '#/components/parameters/start' | 625 | - $ref: '#/components/parameters/start' |
522 | - $ref: '#/components/parameters/count' | 626 | - $ref: '#/components/parameters/count' |
523 | - $ref: '#/components/parameters/sort' | 627 | - $ref: '#/components/parameters/sort' |
@@ -527,16 +631,22 @@ paths: | |||
527 | content: | 631 | content: |
528 | application/json: | 632 | application/json: |
529 | schema: | 633 | schema: |
530 | type: array | 634 | type: object |
531 | items: | 635 | properties: |
532 | $ref: '#/components/schemas/Follow' | 636 | total: |
637 | type: integer | ||
638 | example: 1 | ||
639 | data: | ||
640 | type: array | ||
641 | items: | ||
642 | $ref: '#/components/schemas/Follow' | ||
533 | post: | 643 | post: |
534 | security: | 644 | security: |
535 | - OAuth2: | 645 | - OAuth2: |
536 | - admin | 646 | - admin |
537 | tags: | 647 | tags: |
538 | - Instance Follows | 648 | - Instance Follows |
539 | summary: Follow a server | 649 | summary: Follow a list of servers |
540 | responses: | 650 | responses: |
541 | '204': | 651 | '204': |
542 | description: successful operation | 652 | description: successful operation |
@@ -554,9 +664,33 @@ paths: | |||
554 | type: string | 664 | type: string |
555 | format: hostname | 665 | format: hostname |
556 | uniqueItems: true | 666 | uniqueItems: true |
667 | |||
668 | '/server/following/{host}': | ||
669 | delete: | ||
670 | summary: Unfollow a server | ||
671 | security: | ||
672 | - OAuth2: | ||
673 | - admin | ||
674 | tags: | ||
675 | - Instance Follows | ||
676 | parameters: | ||
677 | - name: host | ||
678 | in: path | ||
679 | required: true | ||
680 | description: The host to unfollow | ||
681 | schema: | ||
682 | type: string | ||
683 | format: hostname | ||
684 | responses: | ||
685 | '204': | ||
686 | description: successful operation | ||
687 | '404': | ||
688 | description: host not found | ||
689 | |||
557 | /users: | 690 | /users: |
558 | post: | 691 | post: |
559 | summary: Create a user | 692 | summary: Create a user |
693 | operationId: createUser | ||
560 | security: | 694 | security: |
561 | - OAuth2: | 695 | - OAuth2: |
562 | - admin | 696 | - admin |
@@ -598,6 +732,7 @@ paths: | |||
598 | required: true | 732 | required: true |
599 | get: | 733 | get: |
600 | summary: List users | 734 | summary: List users |
735 | operationId: getUsers | ||
601 | security: | 736 | security: |
602 | - OAuth2: | 737 | - OAuth2: |
603 | - admin | 738 | - admin |
@@ -618,6 +753,7 @@ paths: | |||
618 | type: array | 753 | type: array |
619 | items: | 754 | items: |
620 | $ref: '#/components/schemas/User' | 755 | $ref: '#/components/schemas/User' |
756 | |||
621 | '/users/{id}': | 757 | '/users/{id}': |
622 | parameters: | 758 | parameters: |
623 | - $ref: '#/components/parameters/id' | 759 | - $ref: '#/components/parameters/id' |
@@ -673,11 +809,120 @@ paths: | |||
673 | schema: | 809 | schema: |
674 | $ref: '#/components/schemas/UpdateUser' | 810 | $ref: '#/components/schemas/UpdateUser' |
675 | required: true | 811 | required: true |
812 | |||
813 | /oauth-clients/local: | ||
814 | get: | ||
815 | summary: Login prerequisite | ||
816 | description: You need to retrieve a client id and secret before [logging in](#operation/getOAuthToken). | ||
817 | operationId: getOAuthClient | ||
818 | tags: | ||
819 | - Session | ||
820 | responses: | ||
821 | '200': | ||
822 | description: successful operation | ||
823 | content: | ||
824 | application/json: | ||
825 | schema: | ||
826 | $ref: '#/components/schemas/OAuthClient' | ||
827 | links: | ||
828 | UseOAuthClientToLogin: | ||
829 | operationId: getOAuthToken | ||
830 | parameters: | ||
831 | client_id: '$response.body#/client_id' | ||
832 | client_secret: '$response.body#/client_secret' | ||
833 | x-codeSamples: | ||
834 | - lang: Shell | ||
835 | source: | | ||
836 | API="https://peertube2.cpy.re/api/v1" | ||
837 | |||
838 | ## AUTH | ||
839 | curl -s "$API/oauth-clients/local" | ||
840 | |||
841 | /users/token: | ||
842 | post: | ||
843 | summary: Login | ||
844 | operationId: getOAuthToken | ||
845 | description: With your [client id and secret](#operation/getOAuthClient), you can retrieve an access and refresh tokens. | ||
846 | tags: | ||
847 | - Session | ||
848 | requestBody: | ||
849 | content: | ||
850 | application/x-www-form-urlencoded: | ||
851 | schema: | ||
852 | oneOf: | ||
853 | - $ref: '#/components/schemas/OAuthToken-password' | ||
854 | - $ref: '#/components/schemas/OAuthToken-refresh_token' | ||
855 | discriminator: | ||
856 | propertyName: grant_type | ||
857 | mapping: | ||
858 | password: '#/components/schemas/OAuthToken-password' | ||
859 | refresh_token: '#/components/schemas/OAuthToken-refresh_token' | ||
860 | responses: | ||
861 | '200': | ||
862 | description: successful operation | ||
863 | content: | ||
864 | application/json: | ||
865 | schema: | ||
866 | type: object | ||
867 | properties: | ||
868 | token_type: | ||
869 | type: string | ||
870 | example: Bearer | ||
871 | access_token: | ||
872 | type: string | ||
873 | example: 90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0 | ||
874 | description: valid for 1 day | ||
875 | refresh_token: | ||
876 | type: string | ||
877 | example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7 | ||
878 | description: valid for 2 weeks | ||
879 | expires_in: | ||
880 | type: integer | ||
881 | minimum: 0 | ||
882 | example: 14399 | ||
883 | refresh_token_expires_in: | ||
884 | type: integer | ||
885 | minimum: 0 | ||
886 | example: 1209600 | ||
887 | x-codeSamples: | ||
888 | - lang: Shell | ||
889 | source: | | ||
890 | ## DEPENDENCIES: jq | ||
891 | API="https://peertube2.cpy.re/api/v1" | ||
892 | USERNAME="<your_username>" | ||
893 | PASSWORD="<your_password>" | ||
894 | |||
895 | ## AUTH | ||
896 | client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id") | ||
897 | client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret") | ||
898 | curl -s "$API/users/token" \ | ||
899 | --data client_id="$client_id" \ | ||
900 | --data client_secret="$client_secret" \ | ||
901 | --data grant_type=password \ | ||
902 | --data username="$USERNAME" \ | ||
903 | --data password="$PASSWORD" \ | ||
904 | | jq -r ".access_token" | ||
905 | |||
906 | /users/revoke-token: | ||
907 | post: | ||
908 | summary: Logout | ||
909 | description: Revokes your access token and its associated refresh token, destroying your current session. | ||
910 | operationId: revokeOAuthToken | ||
911 | tags: | ||
912 | - Session | ||
913 | security: | ||
914 | - OAuth2: [] | ||
915 | responses: | ||
916 | '200': | ||
917 | description: successful operation | ||
918 | |||
676 | /users/register: | 919 | /users/register: |
677 | post: | 920 | post: |
678 | summary: Register a user | 921 | summary: Register a user |
922 | operationId: registerUser | ||
679 | tags: | 923 | tags: |
680 | - Users | 924 | - Users |
925 | - Register | ||
681 | responses: | 926 | responses: |
682 | '204': | 927 | '204': |
683 | description: successful operation | 928 | description: successful operation |
@@ -687,9 +932,55 @@ paths: | |||
687 | schema: | 932 | schema: |
688 | $ref: '#/components/schemas/RegisterUser' | 933 | $ref: '#/components/schemas/RegisterUser' |
689 | required: true | 934 | required: true |
935 | |||
936 | /users/{id}/verify-email: | ||
937 | post: | ||
938 | summary: Verify a user | ||
939 | operationId: verifyUser | ||
940 | description: | | ||
941 | Following a user registration, the new user will receive an email asking to click a link | ||
942 | containing a secret. | ||
943 | tags: | ||
944 | - Users | ||
945 | - Register | ||
946 | parameters: | ||
947 | - $ref: '#/components/parameters/id' | ||
948 | requestBody: | ||
949 | content: | ||
950 | application/json: | ||
951 | schema: | ||
952 | type: object | ||
953 | properties: | ||
954 | verificationString: | ||
955 | type: string | ||
956 | format: url | ||
957 | isPendingEmail: | ||
958 | type: boolean | ||
959 | required: | ||
960 | - verificationString | ||
961 | responses: | ||
962 | '204': | ||
963 | description: successful operation | ||
964 | '403': | ||
965 | description: invalid verification string | ||
966 | '404': | ||
967 | description: user not found | ||
968 | |||
969 | /users/ask-send-verify-email: | ||
970 | post: | ||
971 | summary: Resend user verification link | ||
972 | operationId: resendEmailToVerifyUser | ||
973 | tags: | ||
974 | - Users | ||
975 | - Register | ||
976 | responses: | ||
977 | '204': | ||
978 | description: successful operation | ||
979 | |||
690 | /users/me: | 980 | /users/me: |
691 | get: | 981 | get: |
692 | summary: Get my user information | 982 | summary: Get my user information |
983 | operationId: getUserInfo | ||
693 | security: | 984 | security: |
694 | - OAuth2: | 985 | - OAuth2: |
695 | - user | 986 | - user |
@@ -706,6 +997,7 @@ paths: | |||
706 | $ref: '#/components/schemas/User' | 997 | $ref: '#/components/schemas/User' |
707 | put: | 998 | put: |
708 | summary: Update my user information | 999 | summary: Update my user information |
1000 | operationId: putUserInfo | ||
709 | security: | 1001 | security: |
710 | - OAuth2: | 1002 | - OAuth2: |
711 | - user | 1003 | - user |
@@ -720,6 +1012,7 @@ paths: | |||
720 | schema: | 1012 | schema: |
721 | $ref: '#/components/schemas/UpdateMe' | 1013 | $ref: '#/components/schemas/UpdateMe' |
722 | required: true | 1014 | required: true |
1015 | |||
723 | /users/me/videos/imports: | 1016 | /users/me/videos/imports: |
724 | get: | 1017 | get: |
725 | summary: Get video imports of my user | 1018 | summary: Get video imports of my user |
@@ -740,6 +1033,7 @@ paths: | |||
740 | application/json: | 1033 | application/json: |
741 | schema: | 1034 | schema: |
742 | $ref: '#/components/schemas/VideoImportsList' | 1035 | $ref: '#/components/schemas/VideoImportsList' |
1036 | |||
743 | /users/me/video-quota-used: | 1037 | /users/me/video-quota-used: |
744 | get: | 1038 | get: |
745 | summary: Get my user used quota | 1039 | summary: Get my user used quota |
@@ -764,6 +1058,7 @@ paths: | |||
764 | type: number | 1058 | type: number |
765 | description: The user video quota used today in bytes | 1059 | description: The user video quota used today in bytes |
766 | example: 1681014151 | 1060 | example: 1681014151 |
1061 | |||
767 | '/users/me/videos/{videoId}/rating': | 1062 | '/users/me/videos/{videoId}/rating': |
768 | get: | 1063 | get: |
769 | summary: Get rate of my user for a video | 1064 | summary: Get rate of my user for a video |
@@ -786,6 +1081,7 @@ paths: | |||
786 | application/json: | 1081 | application/json: |
787 | schema: | 1082 | schema: |
788 | $ref: '#/components/schemas/GetMeVideoRating' | 1083 | $ref: '#/components/schemas/GetMeVideoRating' |
1084 | |||
789 | /users/me/videos: | 1085 | /users/me/videos: |
790 | get: | 1086 | get: |
791 | summary: Get videos of my user | 1087 | summary: Get videos of my user |
@@ -806,6 +1102,7 @@ paths: | |||
806 | application/json: | 1102 | application/json: |
807 | schema: | 1103 | schema: |
808 | $ref: '#/components/schemas/VideoListResponse' | 1104 | $ref: '#/components/schemas/VideoListResponse' |
1105 | |||
809 | /users/me/subscriptions: | 1106 | /users/me/subscriptions: |
810 | get: | 1107 | get: |
811 | summary: Get my user subscriptions | 1108 | summary: Get my user subscriptions |
@@ -851,6 +1148,7 @@ paths: | |||
851 | responses: | 1148 | responses: |
852 | '200': | 1149 | '200': |
853 | description: successful operation | 1150 | description: successful operation |
1151 | |||
854 | /users/me/subscriptions/exist: | 1152 | /users/me/subscriptions/exist: |
855 | get: | 1153 | get: |
856 | summary: Get if subscriptions exist for my user | 1154 | summary: Get if subscriptions exist for my user |
@@ -868,6 +1166,7 @@ paths: | |||
868 | application/json: | 1166 | application/json: |
869 | schema: | 1167 | schema: |
870 | type: object | 1168 | type: object |
1169 | |||
871 | /users/me/subscriptions/videos: | 1170 | /users/me/subscriptions/videos: |
872 | get: | 1171 | get: |
873 | summary: List videos of subscriptions of my user | 1172 | summary: List videos of subscriptions of my user |
@@ -897,6 +1196,7 @@ paths: | |||
897 | application/json: | 1196 | application/json: |
898 | schema: | 1197 | schema: |
899 | $ref: '#/components/schemas/VideoListResponse' | 1198 | $ref: '#/components/schemas/VideoListResponse' |
1199 | |||
900 | '/users/me/subscriptions/{subscriptionHandle}': | 1200 | '/users/me/subscriptions/{subscriptionHandle}': |
901 | get: | 1201 | get: |
902 | summary: Get subscription of my user | 1202 | summary: Get subscription of my user |
@@ -926,6 +1226,7 @@ paths: | |||
926 | responses: | 1226 | responses: |
927 | '200': | 1227 | '200': |
928 | description: successful operation | 1228 | description: successful operation |
1229 | |||
929 | /users/me/notifications: | 1230 | /users/me/notifications: |
930 | get: | 1231 | get: |
931 | summary: List my notifications | 1232 | summary: List my notifications |
@@ -949,6 +1250,7 @@ paths: | |||
949 | application/json: | 1250 | application/json: |
950 | schema: | 1251 | schema: |
951 | $ref: '#/components/schemas/NotificationListResponse' | 1252 | $ref: '#/components/schemas/NotificationListResponse' |
1253 | |||
952 | /users/me/notifications/read: | 1254 | /users/me/notifications/read: |
953 | post: | 1255 | post: |
954 | summary: Mark notifications as read by their id | 1256 | summary: Mark notifications as read by their id |
@@ -972,6 +1274,7 @@ paths: | |||
972 | responses: | 1274 | responses: |
973 | '204': | 1275 | '204': |
974 | description: successful operation | 1276 | description: successful operation |
1277 | |||
975 | /users/me/notifications/read-all: | 1278 | /users/me/notifications/read-all: |
976 | post: | 1279 | post: |
977 | summary: Mark all my notification as read | 1280 | summary: Mark all my notification as read |
@@ -982,6 +1285,7 @@ paths: | |||
982 | responses: | 1285 | responses: |
983 | '204': | 1286 | '204': |
984 | description: successful operation | 1287 | description: successful operation |
1288 | |||
985 | /users/me/notification-settings: | 1289 | /users/me/notification-settings: |
986 | put: | 1290 | put: |
987 | summary: Update my notification settings | 1291 | summary: Update my notification settings |
@@ -1022,6 +1326,7 @@ paths: | |||
1022 | responses: | 1326 | responses: |
1023 | '204': | 1327 | '204': |
1024 | description: successful operation | 1328 | description: successful operation |
1329 | |||
1025 | /users/me/history/videos: | 1330 | /users/me/history/videos: |
1026 | get: | 1331 | get: |
1027 | summary: List watched videos history | 1332 | summary: List watched videos history |
@@ -1040,6 +1345,7 @@ paths: | |||
1040 | application/json: | 1345 | application/json: |
1041 | schema: | 1346 | schema: |
1042 | $ref: '#/components/schemas/VideoListResponse' | 1347 | $ref: '#/components/schemas/VideoListResponse' |
1348 | |||
1043 | /users/me/history/videos/remove: | 1349 | /users/me/history/videos/remove: |
1044 | post: | 1350 | post: |
1045 | summary: Clear video history | 1351 | summary: Clear video history |
@@ -1060,6 +1366,7 @@ paths: | |||
1060 | responses: | 1366 | responses: |
1061 | '204': | 1367 | '204': |
1062 | description: successful operation | 1368 | description: successful operation |
1369 | |||
1063 | /users/me/avatar/pick: | 1370 | /users/me/avatar/pick: |
1064 | post: | 1371 | post: |
1065 | summary: Update my user avatar | 1372 | summary: Update my user avatar |
@@ -1098,6 +1405,7 @@ paths: | |||
1098 | encoding: | 1405 | encoding: |
1099 | avatarfile: | 1406 | avatarfile: |
1100 | contentType: image/png, image/jpeg | 1407 | contentType: image/png, image/jpeg |
1408 | |||
1101 | /users/me/avatar: | 1409 | /users/me/avatar: |
1102 | delete: | 1410 | delete: |
1103 | summary: Delete my avatar | 1411 | summary: Delete my avatar |
@@ -1119,6 +1427,7 @@ paths: | |||
1119 | responses: | 1427 | responses: |
1120 | '200': | 1428 | '200': |
1121 | description: successful operation | 1429 | description: successful operation |
1430 | |||
1122 | '/videos/ownership/{id}/accept': | 1431 | '/videos/ownership/{id}/accept': |
1123 | post: | 1432 | post: |
1124 | summary: Accept ownership change request | 1433 | summary: Accept ownership change request |
@@ -1135,6 +1444,7 @@ paths: | |||
1135 | description: cannot terminate an ownership change of another user | 1444 | description: cannot terminate an ownership change of another user |
1136 | '404': | 1445 | '404': |
1137 | description: video owneship change not found | 1446 | description: video owneship change not found |
1447 | |||
1138 | '/videos/ownership/{id}/refuse': | 1448 | '/videos/ownership/{id}/refuse': |
1139 | post: | 1449 | post: |
1140 | summary: Refuse ownership change request | 1450 | summary: Refuse ownership change request |
@@ -1151,6 +1461,7 @@ paths: | |||
1151 | description: cannot terminate an ownership change of another user | 1461 | description: cannot terminate an ownership change of another user |
1152 | '404': | 1462 | '404': |
1153 | description: video owneship change not found | 1463 | description: video owneship change not found |
1464 | |||
1154 | '/videos/{id}/give-ownership': | 1465 | '/videos/{id}/give-ownership': |
1155 | post: | 1466 | post: |
1156 | summary: Request ownership change | 1467 | summary: Request ownership change |
@@ -1178,6 +1489,7 @@ paths: | |||
1178 | description: changing video ownership to a remote account is not supported yet | 1489 | description: changing video ownership to a remote account is not supported yet |
1179 | '404': | 1490 | '404': |
1180 | description: video not found | 1491 | description: video not found |
1492 | |||
1181 | /videos: | 1493 | /videos: |
1182 | get: | 1494 | get: |
1183 | summary: List videos | 1495 | summary: List videos |
@@ -1203,6 +1515,7 @@ paths: | |||
1203 | application/json: | 1515 | application/json: |
1204 | schema: | 1516 | schema: |
1205 | $ref: '#/components/schemas/VideoListResponse' | 1517 | $ref: '#/components/schemas/VideoListResponse' |
1518 | |||
1206 | /videos/categories: | 1519 | /videos/categories: |
1207 | get: | 1520 | get: |
1208 | summary: List available video categories | 1521 | summary: List available video categories |
@@ -1221,6 +1534,7 @@ paths: | |||
1221 | examples: | 1534 | examples: |
1222 | nightly: | 1535 | nightly: |
1223 | externalValue: https://peertube2.cpy.re/api/v1/videos/categories | 1536 | externalValue: https://peertube2.cpy.re/api/v1/videos/categories |
1537 | |||
1224 | /videos/licences: | 1538 | /videos/licences: |
1225 | get: | 1539 | get: |
1226 | summary: List available video licences | 1540 | summary: List available video licences |
@@ -1239,6 +1553,7 @@ paths: | |||
1239 | examples: | 1553 | examples: |
1240 | nightly: | 1554 | nightly: |
1241 | externalValue: https://peertube2.cpy.re/api/v1/videos/licences | 1555 | externalValue: https://peertube2.cpy.re/api/v1/videos/licences |
1556 | |||
1242 | /videos/languages: | 1557 | /videos/languages: |
1243 | get: | 1558 | get: |
1244 | summary: List available video languages | 1559 | summary: List available video languages |
@@ -1257,6 +1572,7 @@ paths: | |||
1257 | examples: | 1572 | examples: |
1258 | nightly: | 1573 | nightly: |
1259 | externalValue: https://peertube2.cpy.re/api/v1/videos/languages | 1574 | externalValue: https://peertube2.cpy.re/api/v1/videos/languages |
1575 | |||
1260 | /videos/privacies: | 1576 | /videos/privacies: |
1261 | get: | 1577 | get: |
1262 | summary: List available video privacy policies | 1578 | summary: List available video privacy policies |
@@ -1275,9 +1591,11 @@ paths: | |||
1275 | examples: | 1591 | examples: |
1276 | nightly: | 1592 | nightly: |
1277 | externalValue: https://peertube2.cpy.re/api/v1/videos/privacies | 1593 | externalValue: https://peertube2.cpy.re/api/v1/videos/privacies |
1594 | |||
1278 | '/videos/{id}': | 1595 | '/videos/{id}': |
1279 | put: | 1596 | put: |
1280 | summary: Update a video | 1597 | summary: Update a video |
1598 | operationId: putVideo | ||
1281 | security: | 1599 | security: |
1282 | - OAuth2: [] | 1600 | - OAuth2: [] |
1283 | tags: | 1601 | tags: |
@@ -1317,7 +1635,7 @@ paths: | |||
1317 | type: string | 1635 | type: string |
1318 | support: | 1636 | support: |
1319 | description: A text tell the audience how to support the video creator | 1637 | description: A text tell the audience how to support the video creator |
1320 | example: Please support my work on <insert crowdfunding plateform>! <3 | 1638 | example: Please support our work on https://soutenir.framasoft.org/en/ <3 |
1321 | type: string | 1639 | type: string |
1322 | nsfw: | 1640 | nsfw: |
1323 | description: Whether or not this video contains sensitive content | 1641 | description: Whether or not this video contains sensitive content |
@@ -1352,6 +1670,7 @@ paths: | |||
1352 | contentType: image/jpeg | 1670 | contentType: image/jpeg |
1353 | get: | 1671 | get: |
1354 | summary: Get a video | 1672 | summary: Get a video |
1673 | operationId: getVideo | ||
1355 | tags: | 1674 | tags: |
1356 | - Video | 1675 | - Video |
1357 | parameters: | 1676 | parameters: |
@@ -1365,6 +1684,7 @@ paths: | |||
1365 | $ref: '#/components/schemas/VideoDetails' | 1684 | $ref: '#/components/schemas/VideoDetails' |
1366 | delete: | 1685 | delete: |
1367 | summary: Delete a video | 1686 | summary: Delete a video |
1687 | operationId: delVideo | ||
1368 | security: | 1688 | security: |
1369 | - OAuth2: [] | 1689 | - OAuth2: [] |
1370 | tags: | 1690 | tags: |
@@ -1374,9 +1694,11 @@ paths: | |||
1374 | responses: | 1694 | responses: |
1375 | '204': | 1695 | '204': |
1376 | description: successful operation | 1696 | description: successful operation |
1697 | |||
1377 | '/videos/{id}/description': | 1698 | '/videos/{id}/description': |
1378 | get: | 1699 | get: |
1379 | summary: Get complete video description | 1700 | summary: Get complete video description |
1701 | operationId: getVideoDesc | ||
1380 | tags: | 1702 | tags: |
1381 | - Video | 1703 | - Video |
1382 | parameters: | 1704 | parameters: |
@@ -1393,6 +1715,7 @@ paths: | |||
1393 | maxLength: 10000 | 1715 | maxLength: 10000 |
1394 | example: | | 1716 | example: | |
1395 | **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)** | 1717 | **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)** |
1718 | |||
1396 | '/videos/{id}/views': | 1719 | '/videos/{id}/views': |
1397 | post: | 1720 | post: |
1398 | summary: Add a view to a video | 1721 | summary: Add a view to a video |
@@ -1403,6 +1726,7 @@ paths: | |||
1403 | responses: | 1726 | responses: |
1404 | '204': | 1727 | '204': |
1405 | description: successful operation | 1728 | description: successful operation |
1729 | |||
1406 | '/videos/{id}/watching': | 1730 | '/videos/{id}/watching': |
1407 | put: | 1731 | put: |
1408 | summary: Set watching progress of a video | 1732 | summary: Set watching progress of a video |
@@ -1421,6 +1745,7 @@ paths: | |||
1421 | responses: | 1745 | responses: |
1422 | '204': | 1746 | '204': |
1423 | description: successful operation | 1747 | description: successful operation |
1748 | |||
1424 | /videos/upload: | 1749 | /videos/upload: |
1425 | post: | 1750 | post: |
1426 | summary: Upload a video | 1751 | summary: Upload a video |
@@ -1477,26 +1802,27 @@ paths: | |||
1477 | FILE_PATH="<your_file_path>" | 1802 | FILE_PATH="<your_file_path>" |
1478 | CHANNEL_ID="<your_channel_id>" | 1803 | CHANNEL_ID="<your_channel_id>" |
1479 | NAME="<video_name>" | 1804 | NAME="<video_name>" |
1805 | API="https://peertube2.cpy.re/api/v1" | ||
1480 | 1806 | ||
1481 | API_PATH="https://peertube2.cpy.re/api/v1" | ||
1482 | ## AUTH | 1807 | ## AUTH |
1483 | client_id=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_id") | 1808 | client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id") |
1484 | client_secret=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_secret") | 1809 | client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret") |
1485 | token=$(curl -s "$API_PATH/users/token" \ | 1810 | token=$(curl -s "$API/users/token" \ |
1486 | --data client_id="$client_id" \ | 1811 | --data client_id="$client_id" \ |
1487 | --data client_secret="$client_secret" \ | 1812 | --data client_secret="$client_secret" \ |
1488 | --data grant_type=password \ | 1813 | --data grant_type=password \ |
1489 | --data response_type=code \ | ||
1490 | --data username="$USERNAME" \ | 1814 | --data username="$USERNAME" \ |
1491 | --data password="$PASSWORD" \ | 1815 | --data password="$PASSWORD" \ |
1492 | | jq -r ".access_token") | 1816 | | jq -r ".access_token") |
1817 | |||
1493 | ## VIDEO UPLOAD | 1818 | ## VIDEO UPLOAD |
1494 | curl -s "$API_PATH/videos/upload" \ | 1819 | curl -s "$API/videos/upload" \ |
1495 | -H "Authorization: Bearer $token" \ | 1820 | -H "Authorization: Bearer $token" \ |
1496 | --max-time 600 \ | 1821 | --max-time 600 \ |
1497 | --form videofile=@"$FILE_PATH" \ | 1822 | --form videofile=@"$FILE_PATH" \ |
1498 | --form channelId=$CHANNEL_ID \ | 1823 | --form channelId=$CHANNEL_ID \ |
1499 | --form name="$NAME" | 1824 | --form name="$NAME" |
1825 | |||
1500 | /videos/upload-resumable: | 1826 | /videos/upload-resumable: |
1501 | post: | 1827 | post: |
1502 | summary: Initialize the resumable upload of a video | 1828 | summary: Initialize the resumable upload of a video |
@@ -1658,6 +1984,7 @@ paths: | |||
1658 | schema: | 1984 | schema: |
1659 | type: number | 1985 | type: number |
1660 | example: 0 | 1986 | example: 0 |
1987 | |||
1661 | /videos/imports: | 1988 | /videos/imports: |
1662 | post: | 1989 | post: |
1663 | summary: Import a video | 1990 | summary: Import a video |
@@ -1672,74 +1999,7 @@ paths: | |||
1672 | content: | 1999 | content: |
1673 | multipart/form-data: | 2000 | multipart/form-data: |
1674 | schema: | 2001 | schema: |
1675 | type: object | 2002 | $ref: '#/components/schemas/VideoCreateImport' |
1676 | properties: | ||
1677 | torrentfile: | ||
1678 | description: Torrent File | ||
1679 | type: string | ||
1680 | format: binary | ||
1681 | targetUrl: | ||
1682 | $ref: '#/components/schemas/VideoImport/properties/targetUrl' | ||
1683 | magnetUri: | ||
1684 | $ref: '#/components/schemas/VideoImport/properties/magnetUri' | ||
1685 | channelId: | ||
1686 | description: Channel id that will contain this video | ||
1687 | allOf: | ||
1688 | - $ref: '#/components/schemas/VideoChannel/properties/id' | ||
1689 | thumbnailfile: | ||
1690 | description: Video thumbnail file | ||
1691 | type: string | ||
1692 | format: binary | ||
1693 | previewfile: | ||
1694 | description: Video preview file | ||
1695 | type: string | ||
1696 | format: binary | ||
1697 | privacy: | ||
1698 | $ref: '#/components/schemas/VideoPrivacySet' | ||
1699 | category: | ||
1700 | $ref: '#/components/schemas/VideoCategorySet' | ||
1701 | licence: | ||
1702 | $ref: '#/components/schemas/VideoLicenceSet' | ||
1703 | language: | ||
1704 | $ref: '#/components/schemas/VideoLanguageSet' | ||
1705 | description: | ||
1706 | description: Video description | ||
1707 | type: string | ||
1708 | waitTranscoding: | ||
1709 | description: Whether or not we wait transcoding before publish the video | ||
1710 | type: boolean | ||
1711 | support: | ||
1712 | description: A text tell the audience how to support the video creator | ||
1713 | example: Please support my work on <insert crowdfunding plateform>! <3 | ||
1714 | type: string | ||
1715 | nsfw: | ||
1716 | description: Whether or not this video contains sensitive content | ||
1717 | type: boolean | ||
1718 | name: | ||
1719 | description: Video name | ||
1720 | type: string | ||
1721 | minLength: 3 | ||
1722 | maxLength: 120 | ||
1723 | tags: | ||
1724 | description: Video tags (maximum 5 tags each between 2 and 30 characters) | ||
1725 | type: array | ||
1726 | minItems: 1 | ||
1727 | maxItems: 5 | ||
1728 | items: | ||
1729 | type: string | ||
1730 | minLength: 2 | ||
1731 | maxLength: 30 | ||
1732 | commentsEnabled: | ||
1733 | description: Enable or disable comments for this video | ||
1734 | type: boolean | ||
1735 | downloadEnabled: | ||
1736 | description: Enable or disable downloading for this video | ||
1737 | type: boolean | ||
1738 | scheduleUpdate: | ||
1739 | $ref: '#/components/schemas/VideoScheduledUpdate' | ||
1740 | required: | ||
1741 | - channelId | ||
1742 | - name | ||
1743 | encoding: | 2003 | encoding: |
1744 | torrentfile: | 2004 | torrentfile: |
1745 | contentType: application/x-bittorrent | 2005 | contentType: application/x-bittorrent |
@@ -1814,7 +2074,7 @@ paths: | |||
1814 | type: string | 2074 | type: string |
1815 | support: | 2075 | support: |
1816 | description: A text tell the audience how to support the creator | 2076 | description: A text tell the audience how to support the creator |
1817 | example: Please support my work on <insert crowdfunding plateform>! <3 | 2077 | example: Please support our work on https://soutenir.framasoft.org/en/ <3 |
1818 | type: string | 2078 | type: string |
1819 | nsfw: | 2079 | nsfw: |
1820 | description: Whether or not this live video/replay contains sensitive content | 2080 | description: Whether or not this live video/replay contains sensitive content |
@@ -2012,7 +2272,6 @@ paths: | |||
2012 | type: array | 2272 | type: array |
2013 | items: | 2273 | items: |
2014 | $ref: '#/components/schemas/Abuse' | 2274 | $ref: '#/components/schemas/Abuse' |
2015 | |||
2016 | post: | 2275 | post: |
2017 | summary: Report an abuse | 2276 | summary: Report an abuse |
2018 | security: | 2277 | security: |
@@ -2042,10 +2301,12 @@ paths: | |||
2042 | - $ref: '#/components/schemas/Video/properties/id' | 2301 | - $ref: '#/components/schemas/Video/properties/id' |
2043 | startAt: | 2302 | startAt: |
2044 | type: integer | 2303 | type: integer |
2304 | format: seconds | ||
2045 | description: Timestamp in the video that marks the beginning of the report | 2305 | description: Timestamp in the video that marks the beginning of the report |
2046 | minimum: 0 | 2306 | minimum: 0 |
2047 | endAt: | 2307 | endAt: |
2048 | type: integer | 2308 | type: integer |
2309 | format: seconds | ||
2049 | description: Timestamp in the video that marks the ending of the report | 2310 | description: Timestamp in the video that marks the ending of the report |
2050 | minimum: 0 | 2311 | minimum: 0 |
2051 | comment: | 2312 | comment: |
@@ -2064,10 +2325,21 @@ paths: | |||
2064 | required: | 2325 | required: |
2065 | - reason | 2326 | - reason |
2066 | responses: | 2327 | responses: |
2067 | '204': | 2328 | '200': |
2068 | description: successful operation | 2329 | description: successful operation |
2330 | content: | ||
2331 | application/json: | ||
2332 | schema: | ||
2333 | type: object | ||
2334 | properties: | ||
2335 | abuse: | ||
2336 | type: object | ||
2337 | properties: | ||
2338 | id: | ||
2339 | $ref: '#/components/schemas/id' | ||
2069 | '400': | 2340 | '400': |
2070 | description: incorrect request parameters | 2341 | description: incorrect request parameters |
2342 | |||
2071 | '/abuses/{abuseId}': | 2343 | '/abuses/{abuseId}': |
2072 | put: | 2344 | put: |
2073 | summary: Update an abuse | 2345 | summary: Update an abuse |
@@ -2112,6 +2384,7 @@ paths: | |||
2112 | description: successful operation | 2384 | description: successful operation |
2113 | '404': | 2385 | '404': |
2114 | description: block not found | 2386 | description: block not found |
2387 | |||
2115 | '/abuses/{abuseId}/messages': | 2388 | '/abuses/{abuseId}/messages': |
2116 | get: | 2389 | get: |
2117 | summary: List messages of an abuse | 2390 | summary: List messages of an abuse |
@@ -2127,10 +2400,15 @@ paths: | |||
2127 | content: | 2400 | content: |
2128 | application/json: | 2401 | application/json: |
2129 | schema: | 2402 | schema: |
2130 | type: array | 2403 | type: object |
2131 | items: | 2404 | properties: |
2132 | $ref: '#/components/schemas/AbuseMessage' | 2405 | total: |
2133 | 2406 | type: integer | |
2407 | example: 1 | ||
2408 | data: | ||
2409 | type: array | ||
2410 | items: | ||
2411 | $ref: '#/components/schemas/AbuseMessage' | ||
2134 | post: | 2412 | post: |
2135 | summary: Add message to an abuse | 2413 | summary: Add message to an abuse |
2136 | security: | 2414 | security: |
@@ -2158,6 +2436,7 @@ paths: | |||
2158 | description: successful operation | 2436 | description: successful operation |
2159 | '400': | 2437 | '400': |
2160 | description: incorrect request parameters | 2438 | description: incorrect request parameters |
2439 | |||
2161 | '/abuses/{abuseId}/messages/{abuseMessageId}': | 2440 | '/abuses/{abuseId}/messages/{abuseMessageId}': |
2162 | delete: | 2441 | delete: |
2163 | summary: Delete an abuse message | 2442 | summary: Delete an abuse message |
@@ -2175,6 +2454,7 @@ paths: | |||
2175 | '/videos/{id}/blacklist': | 2454 | '/videos/{id}/blacklist': |
2176 | post: | 2455 | post: |
2177 | summary: Block a video | 2456 | summary: Block a video |
2457 | operationId: addVideoBlock | ||
2178 | security: | 2458 | security: |
2179 | - OAuth2: | 2459 | - OAuth2: |
2180 | - admin | 2460 | - admin |
@@ -2188,6 +2468,7 @@ paths: | |||
2188 | description: successful operation | 2468 | description: successful operation |
2189 | delete: | 2469 | delete: |
2190 | summary: Unblock a video by its id | 2470 | summary: Unblock a video by its id |
2471 | operationId: delVideoBlock | ||
2191 | security: | 2472 | security: |
2192 | - OAuth2: | 2473 | - OAuth2: |
2193 | - admin | 2474 | - admin |
@@ -2201,11 +2482,13 @@ paths: | |||
2201 | description: successful operation | 2482 | description: successful operation |
2202 | '404': | 2483 | '404': |
2203 | description: block not found | 2484 | description: block not found |
2485 | |||
2204 | /videos/blacklist: | 2486 | /videos/blacklist: |
2205 | get: | 2487 | get: |
2206 | tags: | 2488 | tags: |
2207 | - Video Blocks | 2489 | - Video Blocks |
2208 | summary: List video blocks | 2490 | summary: List video blocks |
2491 | operationId: getVideoBlocks | ||
2209 | security: | 2492 | security: |
2210 | - OAuth2: | 2493 | - OAuth2: |
2211 | - admin | 2494 | - admin |
@@ -2247,9 +2530,11 @@ paths: | |||
2247 | type: array | 2530 | type: array |
2248 | items: | 2531 | items: |
2249 | $ref: '#/components/schemas/VideoBlacklist' | 2532 | $ref: '#/components/schemas/VideoBlacklist' |
2533 | |||
2250 | /videos/{id}/captions: | 2534 | /videos/{id}/captions: |
2251 | get: | 2535 | get: |
2252 | summary: List captions of a video | 2536 | summary: List captions of a video |
2537 | operationId: getVideoCaptions | ||
2253 | tags: | 2538 | tags: |
2254 | - Video Captions | 2539 | - Video Captions |
2255 | parameters: | 2540 | parameters: |
@@ -2269,9 +2554,11 @@ paths: | |||
2269 | type: array | 2554 | type: array |
2270 | items: | 2555 | items: |
2271 | $ref: '#/components/schemas/VideoCaption' | 2556 | $ref: '#/components/schemas/VideoCaption' |
2557 | |||
2272 | /videos/{id}/captions/{captionLanguage}: | 2558 | /videos/{id}/captions/{captionLanguage}: |
2273 | put: | 2559 | put: |
2274 | summary: Add or replace a video caption | 2560 | summary: Add or replace a video caption |
2561 | operationId: addVideoCaption | ||
2275 | security: | 2562 | security: |
2276 | - OAuth2: | 2563 | - OAuth2: |
2277 | - user | 2564 | - user |
@@ -2300,6 +2587,7 @@ paths: | |||
2300 | description: video or language not found | 2587 | description: video or language not found |
2301 | delete: | 2588 | delete: |
2302 | summary: Delete a video caption | 2589 | summary: Delete a video caption |
2590 | operationId: delVideoCaption | ||
2303 | security: | 2591 | security: |
2304 | - OAuth2: | 2592 | - OAuth2: |
2305 | - user | 2593 | - user |
@@ -2313,9 +2601,11 @@ paths: | |||
2313 | description: successful operation | 2601 | description: successful operation |
2314 | '404': | 2602 | '404': |
2315 | description: video or language or caption for that language not found | 2603 | description: video or language or caption for that language not found |
2604 | |||
2316 | /video-channels: | 2605 | /video-channels: |
2317 | get: | 2606 | get: |
2318 | summary: List video channels | 2607 | summary: List video channels |
2608 | operationId: getVideoChannels | ||
2319 | tags: | 2609 | tags: |
2320 | - Video Channels | 2610 | - Video Channels |
2321 | parameters: | 2611 | parameters: |
@@ -2331,6 +2621,7 @@ paths: | |||
2331 | $ref: '#/components/schemas/VideoChannelList' | 2621 | $ref: '#/components/schemas/VideoChannelList' |
2332 | post: | 2622 | post: |
2333 | summary: Create a video channel | 2623 | summary: Create a video channel |
2624 | operationId: addVideoChannel | ||
2334 | security: | 2625 | security: |
2335 | - OAuth2: [] | 2626 | - OAuth2: [] |
2336 | tags: | 2627 | tags: |
@@ -2338,14 +2629,26 @@ paths: | |||
2338 | responses: | 2629 | responses: |
2339 | '204': | 2630 | '204': |
2340 | description: successful operation | 2631 | description: successful operation |
2632 | content: | ||
2633 | application/json: | ||
2634 | schema: | ||
2635 | type: object | ||
2636 | properties: | ||
2637 | videoChannel: | ||
2638 | type: object | ||
2639 | properties: | ||
2640 | id: | ||
2641 | $ref: '#/components/schemas/VideoChannel/properties/id' | ||
2341 | requestBody: | 2642 | requestBody: |
2342 | content: | 2643 | content: |
2343 | application/json: | 2644 | application/json: |
2344 | schema: | 2645 | schema: |
2345 | $ref: '#/components/schemas/VideoChannelCreate' | 2646 | $ref: '#/components/schemas/VideoChannelCreate' |
2647 | |||
2346 | '/video-channels/{channelHandle}': | 2648 | '/video-channels/{channelHandle}': |
2347 | get: | 2649 | get: |
2348 | summary: Get a video channel | 2650 | summary: Get a video channel |
2651 | operationId: getVideoChannel | ||
2349 | tags: | 2652 | tags: |
2350 | - Video Channels | 2653 | - Video Channels |
2351 | parameters: | 2654 | parameters: |
@@ -2359,6 +2662,7 @@ paths: | |||
2359 | $ref: '#/components/schemas/VideoChannel' | 2662 | $ref: '#/components/schemas/VideoChannel' |
2360 | put: | 2663 | put: |
2361 | summary: Update a video channel | 2664 | summary: Update a video channel |
2665 | operationId: putVideoChannel | ||
2362 | security: | 2666 | security: |
2363 | - OAuth2: [] | 2667 | - OAuth2: [] |
2364 | tags: | 2668 | tags: |
@@ -2375,6 +2679,7 @@ paths: | |||
2375 | $ref: '#/components/schemas/VideoChannelUpdate' | 2679 | $ref: '#/components/schemas/VideoChannelUpdate' |
2376 | delete: | 2680 | delete: |
2377 | summary: Delete a video channel | 2681 | summary: Delete a video channel |
2682 | operationId: delVideoChannel | ||
2378 | security: | 2683 | security: |
2379 | - OAuth2: [] | 2684 | - OAuth2: [] |
2380 | tags: | 2685 | tags: |
@@ -2384,9 +2689,11 @@ paths: | |||
2384 | responses: | 2689 | responses: |
2385 | '204': | 2690 | '204': |
2386 | description: successful operation | 2691 | description: successful operation |
2692 | |||
2387 | '/video-channels/{channelHandle}/videos': | 2693 | '/video-channels/{channelHandle}/videos': |
2388 | get: | 2694 | get: |
2389 | summary: List videos of a video channel | 2695 | summary: List videos of a video channel |
2696 | operationId: getVideoChannelVideos | ||
2390 | tags: | 2697 | tags: |
2391 | - Video | 2698 | - Video |
2392 | - Video Channels | 2699 | - Video Channels |
@@ -2411,6 +2718,7 @@ paths: | |||
2411 | application/json: | 2718 | application/json: |
2412 | schema: | 2719 | schema: |
2413 | $ref: '#/components/schemas/VideoListResponse' | 2720 | $ref: '#/components/schemas/VideoListResponse' |
2721 | |||
2414 | '/video-channels/{channelHandle}/avatar/pick': | 2722 | '/video-channels/{channelHandle}/avatar/pick': |
2415 | post: | 2723 | post: |
2416 | summary: Update channel avatar | 2724 | summary: Update channel avatar |
@@ -2451,6 +2759,7 @@ paths: | |||
2451 | encoding: | 2759 | encoding: |
2452 | avatarfile: | 2760 | avatarfile: |
2453 | contentType: image/png, image/jpeg | 2761 | contentType: image/png, image/jpeg |
2762 | |||
2454 | '/video-channels/{channelHandle}/avatar': | 2763 | '/video-channels/{channelHandle}/avatar': |
2455 | delete: | 2764 | delete: |
2456 | summary: Delete channel avatar | 2765 | summary: Delete channel avatar |
@@ -2464,7 +2773,6 @@ paths: | |||
2464 | '204': | 2773 | '204': |
2465 | description: successful operation | 2774 | description: successful operation |
2466 | 2775 | ||
2467 | |||
2468 | '/video-channels/{channelHandle}/banner/pick': | 2776 | '/video-channels/{channelHandle}/banner/pick': |
2469 | post: | 2777 | post: |
2470 | summary: Update channel banner | 2778 | summary: Update channel banner |
@@ -2505,6 +2813,7 @@ paths: | |||
2505 | encoding: | 2813 | encoding: |
2506 | bannerfile: | 2814 | bannerfile: |
2507 | contentType: image/png, image/jpeg | 2815 | contentType: image/png, image/jpeg |
2816 | |||
2508 | '/video-channels/{channelHandle}/banner': | 2817 | '/video-channels/{channelHandle}/banner': |
2509 | delete: | 2818 | delete: |
2510 | summary: Delete channel banner | 2819 | summary: Delete channel banner |
@@ -2617,13 +2926,13 @@ paths: | |||
2617 | thumbnailfile: | 2926 | thumbnailfile: |
2618 | contentType: image/jpeg | 2927 | contentType: image/jpeg |
2619 | 2928 | ||
2620 | /video-playlists/{id}: | 2929 | /video-playlists/{playlistId}: |
2621 | get: | 2930 | get: |
2622 | summary: Get a video playlist | 2931 | summary: Get a video playlist |
2623 | tags: | 2932 | tags: |
2624 | - Video Playlists | 2933 | - Video Playlists |
2625 | parameters: | 2934 | parameters: |
2626 | - $ref: '#/components/parameters/idOrUUID' | 2935 | - $ref: '#/components/parameters/playlistId' |
2627 | responses: | 2936 | responses: |
2628 | '200': | 2937 | '200': |
2629 | description: successful operation | 2938 | description: successful operation |
@@ -2642,7 +2951,7 @@ paths: | |||
2642 | '204': | 2951 | '204': |
2643 | description: successful operation | 2952 | description: successful operation |
2644 | parameters: | 2953 | parameters: |
2645 | - $ref: '#/components/parameters/idOrUUID' | 2954 | - $ref: '#/components/parameters/playlistId' |
2646 | requestBody: | 2955 | requestBody: |
2647 | content: | 2956 | content: |
2648 | multipart/form-data: | 2957 | multipart/form-data: |
@@ -2677,19 +2986,19 @@ paths: | |||
2677 | tags: | 2986 | tags: |
2678 | - Video Playlists | 2987 | - Video Playlists |
2679 | parameters: | 2988 | parameters: |
2680 | - $ref: '#/components/parameters/idOrUUID' | 2989 | - $ref: '#/components/parameters/playlistId' |
2681 | responses: | 2990 | responses: |
2682 | '204': | 2991 | '204': |
2683 | description: successful operation | 2992 | description: successful operation |
2684 | 2993 | ||
2685 | /video-playlists/{id}/videos: | 2994 | /video-playlists/{playlistId}/videos: |
2686 | get: | 2995 | get: |
2687 | summary: 'List videos of a playlist' | 2996 | summary: 'List videos of a playlist' |
2688 | tags: | 2997 | tags: |
2689 | - Videos | 2998 | - Videos |
2690 | - Video Playlists | 2999 | - Video Playlists |
2691 | parameters: | 3000 | parameters: |
2692 | - $ref: '#/components/parameters/idOrUUID' | 3001 | - $ref: '#/components/parameters/playlistId' |
2693 | responses: | 3002 | responses: |
2694 | '200': | 3003 | '200': |
2695 | description: successful operation | 3004 | description: successful operation |
@@ -2698,14 +3007,14 @@ paths: | |||
2698 | schema: | 3007 | schema: |
2699 | $ref: '#/components/schemas/VideoListResponse' | 3008 | $ref: '#/components/schemas/VideoListResponse' |
2700 | post: | 3009 | post: |
2701 | summary: 'Add a video in a playlist' | 3010 | summary: Add a video in a playlist |
2702 | security: | 3011 | security: |
2703 | - OAuth2: [] | 3012 | - OAuth2: [] |
2704 | tags: | 3013 | tags: |
2705 | - Videos | 3014 | - Videos |
2706 | - Video Playlists | 3015 | - Video Playlists |
2707 | parameters: | 3016 | parameters: |
2708 | - $ref: '#/components/parameters/idOrUUID' | 3017 | - $ref: '#/components/parameters/playlistId' |
2709 | responses: | 3018 | responses: |
2710 | '200': | 3019 | '200': |
2711 | description: successful operation | 3020 | description: successful operation |
@@ -2719,6 +3028,7 @@ paths: | |||
2719 | properties: | 3028 | properties: |
2720 | id: | 3029 | id: |
2721 | type: integer | 3030 | type: integer |
3031 | example: 2 | ||
2722 | requestBody: | 3032 | requestBody: |
2723 | content: | 3033 | content: |
2724 | application/json: | 3034 | application/json: |
@@ -2726,19 +3036,22 @@ paths: | |||
2726 | type: object | 3036 | type: object |
2727 | properties: | 3037 | properties: |
2728 | videoId: | 3038 | videoId: |
2729 | allOf: | 3039 | oneOf: |
3040 | - $ref: '#/components/schemas/Video/properties/uuid' | ||
2730 | - $ref: '#/components/schemas/Video/properties/id' | 3041 | - $ref: '#/components/schemas/Video/properties/id' |
2731 | description: Video to add in the playlist | 3042 | description: Video to add in the playlist |
2732 | startTimestamp: | 3043 | startTimestamp: |
2733 | type: integer | 3044 | type: integer |
2734 | description: Start the video at this specific timestamp (in seconds) | 3045 | format: seconds |
3046 | description: Start the video at this specific timestamp | ||
2735 | stopTimestamp: | 3047 | stopTimestamp: |
2736 | type: integer | 3048 | type: integer |
2737 | description: Stop the video at this specific timestamp (in seconds) | 3049 | format: seconds |
3050 | description: Stop the video at this specific timestamp | ||
2738 | required: | 3051 | required: |
2739 | - videoId | 3052 | - videoId |
2740 | 3053 | ||
2741 | /video-playlists/{id}/videos/reorder: | 3054 | /video-playlists/{playlistId}/videos/reorder: |
2742 | post: | 3055 | post: |
2743 | summary: 'Reorder a playlist' | 3056 | summary: 'Reorder a playlist' |
2744 | security: | 3057 | security: |
@@ -2746,7 +3059,7 @@ paths: | |||
2746 | tags: | 3059 | tags: |
2747 | - Video Playlists | 3060 | - Video Playlists |
2748 | parameters: | 3061 | parameters: |
2749 | - $ref: '#/components/parameters/idOrUUID' | 3062 | - $ref: '#/components/parameters/playlistId' |
2750 | responses: | 3063 | responses: |
2751 | '204': | 3064 | '204': |
2752 | description: successful operation | 3065 | description: successful operation |
@@ -2772,15 +3085,15 @@ paths: | |||
2772 | - startPosition | 3085 | - startPosition |
2773 | - insertAfterPosition | 3086 | - insertAfterPosition |
2774 | 3087 | ||
2775 | /video-playlists/{id}/videos/{playlistElementId}: | 3088 | /video-playlists/{playlistId}/videos/{playlistElementId}: |
2776 | put: | 3089 | put: |
2777 | summary: 'Update a playlist element' | 3090 | summary: Update a playlist element |
2778 | security: | 3091 | security: |
2779 | - OAuth2: [] | 3092 | - OAuth2: [] |
2780 | tags: | 3093 | tags: |
2781 | - Video Playlists | 3094 | - Video Playlists |
2782 | parameters: | 3095 | parameters: |
2783 | - $ref: '#/components/parameters/idOrUUID' | 3096 | - $ref: '#/components/parameters/playlistId' |
2784 | - $ref: '#/components/parameters/playlistElementId' | 3097 | - $ref: '#/components/parameters/playlistElementId' |
2785 | responses: | 3098 | responses: |
2786 | '204': | 3099 | '204': |
@@ -2793,18 +3106,20 @@ paths: | |||
2793 | properties: | 3106 | properties: |
2794 | startTimestamp: | 3107 | startTimestamp: |
2795 | type: integer | 3108 | type: integer |
2796 | description: 'Start the video at this specific timestamp (in seconds)' | 3109 | format: seconds |
3110 | description: Start the video at this specific timestamp | ||
2797 | stopTimestamp: | 3111 | stopTimestamp: |
2798 | type: integer | 3112 | type: integer |
2799 | description: 'Stop the video at this specific timestamp (in seconds)' | 3113 | format: seconds |
3114 | description: Stop the video at this specific timestamp | ||
2800 | delete: | 3115 | delete: |
2801 | summary: 'Delete an element from a playlist' | 3116 | summary: Delete an element from a playlist |
2802 | security: | 3117 | security: |
2803 | - OAuth2: [] | 3118 | - OAuth2: [] |
2804 | tags: | 3119 | tags: |
2805 | - Video Playlists | 3120 | - Video Playlists |
2806 | parameters: | 3121 | parameters: |
2807 | - $ref: '#/components/parameters/idOrUUID' | 3122 | - $ref: '#/components/parameters/playlistId' |
2808 | - $ref: '#/components/parameters/playlistElementId' | 3123 | - $ref: '#/components/parameters/playlistElementId' |
2809 | responses: | 3124 | responses: |
2810 | '204': | 3125 | '204': |
@@ -2812,7 +3127,7 @@ paths: | |||
2812 | 3127 | ||
2813 | '/users/me/video-playlists/videos-exist': | 3128 | '/users/me/video-playlists/videos-exist': |
2814 | get: | 3129 | get: |
2815 | summary: 'Check video exists in my playlists' | 3130 | summary: Check video exists in my playlists |
2816 | security: | 3131 | security: |
2817 | - OAuth2: [] | 3132 | - OAuth2: [] |
2818 | tags: | 3133 | tags: |
@@ -2845,8 +3160,10 @@ paths: | |||
2845 | type: integer | 3160 | type: integer |
2846 | startTimestamp: | 3161 | startTimestamp: |
2847 | type: integer | 3162 | type: integer |
3163 | format: seconds | ||
2848 | stopTimestamp: | 3164 | stopTimestamp: |
2849 | type: integer | 3165 | type: integer |
3166 | format: seconds | ||
2850 | 3167 | ||
2851 | '/accounts/{name}/video-channels': | 3168 | '/accounts/{name}/video-channels': |
2852 | get: | 3169 | get: |
@@ -2871,6 +3188,7 @@ paths: | |||
2871 | application/json: | 3188 | application/json: |
2872 | schema: | 3189 | schema: |
2873 | $ref: '#/components/schemas/VideoChannelList' | 3190 | $ref: '#/components/schemas/VideoChannelList' |
3191 | |||
2874 | '/accounts/{name}/ratings': | 3192 | '/accounts/{name}/ratings': |
2875 | get: | 3193 | get: |
2876 | summary: List ratings of an account | 3194 | summary: List ratings of an account |
@@ -2901,6 +3219,7 @@ paths: | |||
2901 | type: array | 3219 | type: array |
2902 | items: | 3220 | items: |
2903 | $ref: '#/components/schemas/VideoRating' | 3221 | $ref: '#/components/schemas/VideoRating' |
3222 | |||
2904 | '/videos/{id}/comment-threads': | 3223 | '/videos/{id}/comment-threads': |
2905 | get: | 3224 | get: |
2906 | summary: List threads of a video | 3225 | summary: List threads of a video |
@@ -2942,8 +3261,10 @@ paths: | |||
2942 | type: object | 3261 | type: object |
2943 | properties: | 3262 | properties: |
2944 | text: | 3263 | text: |
2945 | type: string | 3264 | allOf: |
2946 | description: 'Text comment' | 3265 | - $ref: '#/components/schemas/VideoComment/properties/text' |
3266 | format: markdown | ||
3267 | maxLength: 10000 | ||
2947 | required: | 3268 | required: |
2948 | - text | 3269 | - text |
2949 | 3270 | ||
@@ -2962,6 +3283,7 @@ paths: | |||
2962 | application/json: | 3283 | application/json: |
2963 | schema: | 3284 | schema: |
2964 | $ref: '#/components/schemas/VideoCommentThreadTree' | 3285 | $ref: '#/components/schemas/VideoCommentThreadTree' |
3286 | |||
2965 | '/videos/{id}/comments/{commentId}': | 3287 | '/videos/{id}/comments/{commentId}': |
2966 | post: | 3288 | post: |
2967 | summary: Reply to a thread of a video | 3289 | summary: Reply to a thread of a video |
@@ -2988,10 +3310,12 @@ paths: | |||
2988 | type: object | 3310 | type: object |
2989 | properties: | 3311 | properties: |
2990 | text: | 3312 | text: |
2991 | $ref: '#/components/schemas/VideoComment/properties/text' | 3313 | allOf: |
3314 | - $ref: '#/components/schemas/VideoComment/properties/text' | ||
3315 | format: markdown | ||
3316 | maxLength: 10000 | ||
2992 | required: | 3317 | required: |
2993 | - text | 3318 | - text |
2994 | |||
2995 | delete: | 3319 | delete: |
2996 | summary: Delete a comment or a reply | 3320 | summary: Delete a comment or a reply |
2997 | security: | 3321 | security: |
@@ -3010,6 +3334,7 @@ paths: | |||
3010 | description: comment or video does not exist | 3334 | description: comment or video does not exist |
3011 | '409': | 3335 | '409': |
3012 | description: comment is already deleted | 3336 | description: comment is already deleted |
3337 | |||
3013 | '/videos/{id}/rate': | 3338 | '/videos/{id}/rate': |
3014 | put: | 3339 | put: |
3015 | summary: Like/dislike a video | 3340 | summary: Like/dislike a video |
@@ -3019,11 +3344,25 @@ paths: | |||
3019 | - Video Rates | 3344 | - Video Rates |
3020 | parameters: | 3345 | parameters: |
3021 | - $ref: '#/components/parameters/idOrUUID' | 3346 | - $ref: '#/components/parameters/idOrUUID' |
3347 | requestBody: | ||
3348 | content: | ||
3349 | application/json: | ||
3350 | schema: | ||
3351 | type: object | ||
3352 | properties: | ||
3353 | rating: | ||
3354 | type: string | ||
3355 | enum: | ||
3356 | - like | ||
3357 | - dislike | ||
3358 | required: | ||
3359 | - rating | ||
3022 | responses: | 3360 | responses: |
3023 | '204': | 3361 | '204': |
3024 | description: successful operation | 3362 | description: successful operation |
3025 | '404': | 3363 | '404': |
3026 | description: video does not exist | 3364 | description: video does not exist |
3365 | |||
3027 | /search/videos: | 3366 | /search/videos: |
3028 | get: | 3367 | get: |
3029 | tags: | 3368 | tags: |
@@ -3099,6 +3438,7 @@ paths: | |||
3099 | $ref: '#/components/schemas/VideoListResponse' | 3438 | $ref: '#/components/schemas/VideoListResponse' |
3100 | '500': | 3439 | '500': |
3101 | description: search index unavailable | 3440 | description: search index unavailable |
3441 | |||
3102 | /search/video-channels: | 3442 | /search/video-channels: |
3103 | get: | 3443 | get: |
3104 | tags: | 3444 | tags: |
@@ -3130,7 +3470,8 @@ paths: | |||
3130 | $ref: '#/components/schemas/VideoChannelList' | 3470 | $ref: '#/components/schemas/VideoChannelList' |
3131 | '500': | 3471 | '500': |
3132 | description: search index unavailable | 3472 | description: search index unavailable |
3133 | /blocklist/accounts: | 3473 | |
3474 | /server/blocklist/accounts: | ||
3134 | get: | 3475 | get: |
3135 | tags: | 3476 | tags: |
3136 | - Account Blocks | 3477 | - Account Blocks |
@@ -3169,7 +3510,8 @@ paths: | |||
3169 | description: successful operation | 3510 | description: successful operation |
3170 | '409': | 3511 | '409': |
3171 | description: self-blocking forbidden | 3512 | description: self-blocking forbidden |
3172 | '/blocklist/accounts/{accountName}': | 3513 | |
3514 | '/server/blocklist/accounts/{accountName}': | ||
3173 | delete: | 3515 | delete: |
3174 | tags: | 3516 | tags: |
3175 | - Account Blocks | 3517 | - Account Blocks |
@@ -3189,7 +3531,8 @@ paths: | |||
3189 | description: successful operation | 3531 | description: successful operation |
3190 | '404': | 3532 | '404': |
3191 | description: account or account block does not exist | 3533 | description: account or account block does not exist |
3192 | /blocklist/servers: | 3534 | |
3535 | /server/blocklist/servers: | ||
3193 | get: | 3536 | get: |
3194 | tags: | 3537 | tags: |
3195 | - Server Blocks | 3538 | - Server Blocks |
@@ -3224,11 +3567,12 @@ paths: | |||
3224 | required: | 3567 | required: |
3225 | - host | 3568 | - host |
3226 | responses: | 3569 | responses: |
3227 | '200': | 3570 | '204': |
3228 | description: successful operation | 3571 | description: successful operation |
3229 | '409': | 3572 | '409': |
3230 | description: self-blocking forbidden | 3573 | description: self-blocking forbidden |
3231 | '/blocklist/servers/{host}': | 3574 | |
3575 | '/server/blocklist/servers/{host}': | ||
3232 | delete: | 3576 | delete: |
3233 | tags: | 3577 | tags: |
3234 | - Server Blocks | 3578 | - Server Blocks |
@@ -3245,11 +3589,12 @@ paths: | |||
3245 | type: string | 3589 | type: string |
3246 | format: hostname | 3590 | format: hostname |
3247 | responses: | 3591 | responses: |
3248 | '201': | 3592 | '204': |
3249 | description: successful operation | 3593 | description: successful operation |
3250 | '404': | 3594 | '404': |
3251 | description: account block does not exist | 3595 | description: account block does not exist |
3252 | /redundancy/{host}: | 3596 | |
3597 | /server/redundancy/{host}: | ||
3253 | put: | 3598 | put: |
3254 | tags: | 3599 | tags: |
3255 | - Instance Redundancy | 3600 | - Instance Redundancy |
@@ -3281,7 +3626,8 @@ paths: | |||
3281 | description: successful operation | 3626 | description: successful operation |
3282 | '404': | 3627 | '404': |
3283 | description: server is not already known | 3628 | description: server is not already known |
3284 | /redundancy/videos: | 3629 | |
3630 | /server/redundancy/videos: | ||
3285 | get: | 3631 | get: |
3286 | tags: | 3632 | tags: |
3287 | - Video Mirroring | 3633 | - Video Mirroring |
@@ -3337,7 +3683,8 @@ paths: | |||
3337 | description: video does not exist | 3683 | description: video does not exist |
3338 | '409': | 3684 | '409': |
3339 | description: video is already mirrored | 3685 | description: video is already mirrored |
3340 | /redundancy/videos/{redundancyId}: | 3686 | |
3687 | /server/redundancy/videos/{redundancyId}: | ||
3341 | delete: | 3688 | delete: |
3342 | tags: | 3689 | tags: |
3343 | - Video Mirroring | 3690 | - Video Mirroring |
@@ -3357,6 +3704,7 @@ paths: | |||
3357 | description: successful operation | 3704 | description: successful operation |
3358 | '404': | 3705 | '404': |
3359 | description: video redundancy not found | 3706 | description: video redundancy not found |
3707 | |||
3360 | '/feeds/video-comments.{format}': | 3708 | '/feeds/video-comments.{format}': |
3361 | get: | 3709 | get: |
3362 | tags: | 3710 | tags: |
@@ -3450,6 +3798,7 @@ paths: | |||
3450 | description: video, video channel or account not found | 3798 | description: video, video channel or account not found |
3451 | '406': | 3799 | '406': |
3452 | description: accept header unsupported | 3800 | description: accept header unsupported |
3801 | |||
3453 | '/feeds/videos.{format}': | 3802 | '/feeds/videos.{format}': |
3454 | get: | 3803 | get: |
3455 | tags: | 3804 | tags: |
@@ -3536,6 +3885,7 @@ paths: | |||
3536 | description: video channel or account not found | 3885 | description: video channel or account not found |
3537 | '406': | 3886 | '406': |
3538 | description: accept header unsupported | 3887 | description: accept header unsupported |
3888 | |||
3539 | '/feeds/subscriptions.{format}': | 3889 | '/feeds/subscriptions.{format}': |
3540 | get: | 3890 | get: |
3541 | tags: | 3891 | tags: |
@@ -3598,6 +3948,7 @@ paths: | |||
3598 | type: object | 3948 | type: object |
3599 | '406': | 3949 | '406': |
3600 | description: accept header unsupported | 3950 | description: accept header unsupported |
3951 | |||
3601 | /plugins: | 3952 | /plugins: |
3602 | get: | 3953 | get: |
3603 | tags: | 3954 | tags: |
@@ -3625,6 +3976,7 @@ paths: | |||
3625 | application/json: | 3976 | application/json: |
3626 | schema: | 3977 | schema: |
3627 | $ref: '#/components/schemas/PluginResponse' | 3978 | $ref: '#/components/schemas/PluginResponse' |
3979 | |||
3628 | /plugins/available: | 3980 | /plugins/available: |
3629 | get: | 3981 | get: |
3630 | tags: | 3982 | tags: |
@@ -3658,6 +4010,7 @@ paths: | |||
3658 | $ref: '#/components/schemas/PluginResponse' | 4010 | $ref: '#/components/schemas/PluginResponse' |
3659 | '503': | 4011 | '503': |
3660 | description: plugin index unavailable | 4012 | description: plugin index unavailable |
4013 | |||
3661 | /plugins/install: | 4014 | /plugins/install: |
3662 | post: | 4015 | post: |
3663 | tags: | 4016 | tags: |
@@ -3691,6 +4044,7 @@ paths: | |||
3691 | description: successful operation | 4044 | description: successful operation |
3692 | '400': | 4045 | '400': |
3693 | description: should have either `npmName` or `path` set | 4046 | description: should have either `npmName` or `path` set |
4047 | |||
3694 | /plugins/update: | 4048 | /plugins/update: |
3695 | post: | 4049 | post: |
3696 | tags: | 4050 | tags: |
@@ -3726,6 +4080,7 @@ paths: | |||
3726 | description: should have either `npmName` or `path` set | 4080 | description: should have either `npmName` or `path` set |
3727 | '404': | 4081 | '404': |
3728 | description: existing plugin not found | 4082 | description: existing plugin not found |
4083 | |||
3729 | /plugins/uninstall: | 4084 | /plugins/uninstall: |
3730 | post: | 4085 | post: |
3731 | tags: | 4086 | tags: |
@@ -3751,6 +4106,7 @@ paths: | |||
3751 | description: successful operation | 4106 | description: successful operation |
3752 | '404': | 4107 | '404': |
3753 | description: existing plugin not found | 4108 | description: existing plugin not found |
4109 | |||
3754 | /plugins/{npmName}: | 4110 | /plugins/{npmName}: |
3755 | get: | 4111 | get: |
3756 | tags: | 4112 | tags: |
@@ -3770,6 +4126,7 @@ paths: | |||
3770 | $ref: '#/components/schemas/Plugin' | 4126 | $ref: '#/components/schemas/Plugin' |
3771 | '404': | 4127 | '404': |
3772 | description: plugin not found | 4128 | description: plugin not found |
4129 | |||
3773 | /plugins/{npmName}/settings: | 4130 | /plugins/{npmName}/settings: |
3774 | put: | 4131 | put: |
3775 | tags: | 4132 | tags: |
@@ -3794,6 +4151,7 @@ paths: | |||
3794 | description: successful operation | 4151 | description: successful operation |
3795 | '404': | 4152 | '404': |
3796 | description: plugin not found | 4153 | description: plugin not found |
4154 | |||
3797 | /plugins/{npmName}/public-settings: | 4155 | /plugins/{npmName}/public-settings: |
3798 | get: | 4156 | get: |
3799 | tags: | 4157 | tags: |
@@ -3811,6 +4169,7 @@ paths: | |||
3811 | additionalProperties: true | 4169 | additionalProperties: true |
3812 | '404': | 4170 | '404': |
3813 | description: plugin not found | 4171 | description: plugin not found |
4172 | |||
3814 | /plugins/{npmName}/registered-settings: | 4173 | /plugins/{npmName}/registered-settings: |
3815 | get: | 4174 | get: |
3816 | tags: | 4175 | tags: |
@@ -3831,6 +4190,7 @@ paths: | |||
3831 | additionalProperties: true | 4190 | additionalProperties: true |
3832 | '404': | 4191 | '404': |
3833 | description: plugin not found | 4192 | description: plugin not found |
4193 | |||
3834 | servers: | 4194 | servers: |
3835 | - url: 'https://peertube2.cpy.re/api/v1' | 4195 | - url: 'https://peertube2.cpy.re/api/v1' |
3836 | description: Live Test Server (live data - latest nightly version) | 4196 | description: Live Test Server (live data - latest nightly version) |
@@ -4019,6 +4379,13 @@ components: | |||
4019 | oneOf: | 4379 | oneOf: |
4020 | - $ref: '#/components/schemas/id' | 4380 | - $ref: '#/components/schemas/id' |
4021 | - $ref: '#/components/schemas/UUIDv4' | 4381 | - $ref: '#/components/schemas/UUIDv4' |
4382 | playlistId: | ||
4383 | name: playlistId | ||
4384 | in: path | ||
4385 | required: true | ||
4386 | description: Playlist id | ||
4387 | schema: | ||
4388 | $ref: '#/components/schemas/VideoPlaylist/properties/id' | ||
4022 | playlistElementId: | 4389 | playlistElementId: |
4023 | name: playlistElementId | 4390 | name: playlistElementId |
4024 | in: path | 4391 | in: path |
@@ -4223,22 +4590,42 @@ components: | |||
4223 | - activitypub-refresher | 4590 | - activitypub-refresher |
4224 | - video-redundancy | 4591 | - video-redundancy |
4225 | - video-live-ending | 4592 | - video-live-ending |
4593 | followState: | ||
4594 | name: state | ||
4595 | in: query | ||
4596 | schema: | ||
4597 | type: string | ||
4598 | enum: | ||
4599 | - pending | ||
4600 | - accepted | ||
4601 | actorType: | ||
4602 | name: actorType | ||
4603 | in: query | ||
4604 | schema: | ||
4605 | type: string | ||
4606 | enum: | ||
4607 | - Person | ||
4608 | - Application | ||
4609 | - Group | ||
4610 | - Service | ||
4611 | - Organization | ||
4226 | securitySchemes: | 4612 | securitySchemes: |
4227 | OAuth2: | 4613 | OAuth2: |
4228 | description: | | 4614 | description: | |
4229 | Authenticating via OAuth requires the following steps: | 4615 | Authenticating via OAuth requires the following steps: |
4230 | - Have an activated account | 4616 | - Have an activated account |
4231 | - [Generate](https://docs.joinpeertube.org/api-rest-getting-started) a | 4617 | - [Generate] an access token for that account at `/api/v1/users/token`. |
4232 | Bearer Token for that account at `/api/v1/users/token` | 4618 | - Make requests with the *Authorization: Bearer <token\>* header |
4233 | - Make authenticated requests, putting *Authorization: Bearer <token\>* | ||
4234 | - Profit, depending on the role assigned to the account | 4619 | - Profit, depending on the role assigned to the account |
4235 | 4620 | ||
4236 | Note that the __access token is valid for 1 day__ and, and is given | 4621 | Note that the __access token is valid for 1 day__ and is given |
4237 | along with a __refresh token valid for 2 weeks__. | 4622 | along with a __refresh token valid for 2 weeks__. |
4623 | |||
4624 | [Generate]: https://docs.joinpeertube.org/api-rest-getting-started | ||
4238 | type: oauth2 | 4625 | type: oauth2 |
4239 | flows: | 4626 | flows: |
4240 | password: | 4627 | password: |
4241 | tokenUrl: 'https://peertube.example.com/api/v1/users/token' | 4628 | tokenUrl: /api/v1/users/token |
4242 | scopes: | 4629 | scopes: |
4243 | admin: Admin scope | 4630 | admin: Admin scope |
4244 | moderator: Moderator scope | 4631 | moderator: Moderator scope |
@@ -4258,20 +4645,21 @@ components: | |||
4258 | maxLength: 36 | 4645 | maxLength: 36 |
4259 | username: | 4646 | username: |
4260 | type: string | 4647 | type: string |
4261 | description: The username of the user | 4648 | description: immutable name of the user, used to find or mention its actor |
4262 | example: chocobozzz | 4649 | example: chocobozzz |
4263 | pattern: '/^[a-z0-9._]{1,50}$/' | 4650 | pattern: '/^[a-z0-9._]+$/' |
4264 | minLength: 1 | 4651 | minLength: 1 |
4265 | maxLength: 50 | 4652 | maxLength: 50 |
4266 | usernameChannel: | 4653 | usernameChannel: |
4267 | type: string | 4654 | type: string |
4268 | description: The username for the default channel | 4655 | description: immutable name of the channel, used to interact with its actor |
4269 | example: The Capybara Channel | 4656 | example: framasoft_videos |
4270 | pattern: '/^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\-_.:]+$/' | 4657 | pattern: '/^[a-zA-Z0-9\\-_.:]+$/' |
4658 | minLength: 1 | ||
4659 | maxLength: 50 | ||
4271 | password: | 4660 | password: |
4272 | type: string | 4661 | type: string |
4273 | format: password | 4662 | format: password |
4274 | description: The password of the user | ||
4275 | minLength: 6 | 4663 | minLength: 6 |
4276 | maxLength: 255 | 4664 | maxLength: 255 |
4277 | 4665 | ||
@@ -4483,8 +4871,10 @@ components: | |||
4483 | type: integer | 4871 | type: integer |
4484 | startTimestamp: | 4872 | startTimestamp: |
4485 | type: integer | 4873 | type: integer |
4874 | format: seconds | ||
4486 | stopTimestamp: | 4875 | stopTimestamp: |
4487 | type: integer | 4876 | type: integer |
4877 | format: seconds | ||
4488 | video: | 4878 | video: |
4489 | nullable: true | 4879 | nullable: true |
4490 | allOf: | 4880 | allOf: |
@@ -4633,6 +5023,7 @@ components: | |||
4633 | duration: | 5023 | duration: |
4634 | type: integer | 5024 | type: integer |
4635 | example: 1419 | 5025 | example: 1419 |
5026 | format: seconds | ||
4636 | description: duration of the video in seconds | 5027 | description: duration of the video in seconds |
4637 | isLocal: | 5028 | isLocal: |
4638 | type: boolean | 5029 | type: boolean |
@@ -4701,7 +5092,7 @@ components: | |||
4701 | support: | 5092 | support: |
4702 | type: string | 5093 | type: string |
4703 | description: A text tell the audience how to support the video creator | 5094 | description: A text tell the audience how to support the video creator |
4704 | example: Please support my work on <insert crowdfunding plateform>! <3 | 5095 | example: Please support our work on https://soutenir.framasoft.org/en/ <3 |
4705 | minLength: 3 | 5096 | minLength: 3 |
4706 | maxLength: 1000 | 5097 | maxLength: 1000 |
4707 | channel: | 5098 | channel: |
@@ -4806,10 +5197,33 @@ components: | |||
4806 | label: | 5197 | label: |
4807 | type: string | 5198 | type: string |
4808 | example: Pending | 5199 | example: Pending |
5200 | VideoCreateImport: | ||
5201 | allOf: | ||
5202 | - type: object | ||
5203 | additionalProperties: false | ||
5204 | oneOf: | ||
5205 | - properties: | ||
5206 | targetUrl: | ||
5207 | $ref: '#/components/schemas/VideoImport/properties/targetUrl' | ||
5208 | required: [targetUrl] | ||
5209 | - properties: | ||
5210 | magnetUri: | ||
5211 | $ref: '#/components/schemas/VideoImport/properties/magnetUri' | ||
5212 | required: [magnetUri] | ||
5213 | - properties: | ||
5214 | torrentfile: | ||
5215 | $ref: '#/components/schemas/VideoImport/properties/torrentfile' | ||
5216 | required: [torrentfile] | ||
5217 | - $ref: '#/components/schemas/VideoUploadRequestCommon' | ||
5218 | required: | ||
5219 | - channelId | ||
5220 | - name | ||
4809 | VideoImport: | 5221 | VideoImport: |
4810 | properties: | 5222 | properties: |
4811 | id: | 5223 | id: |
4812 | $ref: '#/components/schemas/id' | 5224 | readOnly: true |
5225 | allOf: | ||
5226 | - $ref: '#/components/schemas/id' | ||
4813 | targetUrl: | 5227 | targetUrl: |
4814 | type: string | 5228 | type: string |
4815 | format: url | 5229 | format: url |
@@ -4821,19 +5235,31 @@ components: | |||
4821 | description: magnet URI allowing to resolve the import's source video | 5235 | description: magnet URI allowing to resolve the import's source video |
4822 | example: magnet:?xs=https%3A%2F%2Fframatube.org%2Fstatic%2Ftorrents%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.torrent&xt=urn:btih:38b4747ff788b30bf61f59d1965cd38f9e48e01f&dn=What+is+PeerTube%3F&tr=wss%3A%2F%2Fframatube.org%2Ftracker%2Fsocket&tr=https%3A%2F%2Fframatube.org%2Ftracker%2Fannounce&ws=https%3A%2F%2Fframatube.org%2Fstatic%2Fwebseed%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.mp4 | 5236 | example: magnet:?xs=https%3A%2F%2Fframatube.org%2Fstatic%2Ftorrents%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.torrent&xt=urn:btih:38b4747ff788b30bf61f59d1965cd38f9e48e01f&dn=What+is+PeerTube%3F&tr=wss%3A%2F%2Fframatube.org%2Ftracker%2Fsocket&tr=https%3A%2F%2Fframatube.org%2Ftracker%2Fannounce&ws=https%3A%2F%2Fframatube.org%2Fstatic%2Fwebseed%2F9c9de5e8-0a1e-484a-b099-e80766180a6d-240.mp4 |
4823 | pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i | 5237 | pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i |
5238 | torrentfile: | ||
5239 | writeOnly: true | ||
5240 | type: string | ||
5241 | format: binary | ||
5242 | description: Torrent file containing only the video file | ||
4824 | torrentName: | 5243 | torrentName: |
5244 | readOnly: true | ||
4825 | type: string | 5245 | type: string |
4826 | state: | 5246 | state: |
4827 | $ref: '#/components/schemas/VideoImportStateConstant' | 5247 | readOnly: true |
5248 | allOf: | ||
5249 | - $ref: '#/components/schemas/VideoImportStateConstant' | ||
4828 | error: | 5250 | error: |
5251 | readOnly: true | ||
4829 | type: string | 5252 | type: string |
4830 | createdAt: | 5253 | createdAt: |
5254 | readOnly: true | ||
4831 | type: string | 5255 | type: string |
4832 | format: date-time | 5256 | format: date-time |
4833 | updatedAt: | 5257 | updatedAt: |
5258 | readOnly: true | ||
4834 | type: string | 5259 | type: string |
4835 | format: date-time | 5260 | format: date-time |
4836 | video: | 5261 | video: |
5262 | readOnly: true | ||
4837 | nullable: true | 5263 | nullable: true |
4838 | allOf: | 5264 | allOf: |
4839 | - $ref: '#/components/schemas/Video' | 5265 | - $ref: '#/components/schemas/Video' |
@@ -4963,13 +5389,16 @@ components: | |||
4963 | format: url | 5389 | format: url |
4964 | text: | 5390 | text: |
4965 | type: string | 5391 | type: string |
4966 | description: Text of the comment in Markdown | 5392 | format: html |
5393 | description: Text of the comment | ||
4967 | minLength: 1 | 5394 | minLength: 1 |
4968 | maxLength: 10000 | 5395 | example: This video is wonderful! |
4969 | threadId: | 5396 | threadId: |
4970 | type: integer | ||
4971 | inReplyToCommentId: | ||
4972 | $ref: '#/components/schemas/id' | 5397 | $ref: '#/components/schemas/id' |
5398 | inReplyToCommentId: | ||
5399 | nullable: true | ||
5400 | allOf: | ||
5401 | - $ref: '#/components/schemas/id' | ||
4973 | videoId: | 5402 | videoId: |
4974 | $ref: '#/components/schemas/Video/properties/id' | 5403 | $ref: '#/components/schemas/Video/properties/id' |
4975 | createdAt: | 5404 | createdAt: |
@@ -4978,6 +5407,14 @@ components: | |||
4978 | updatedAt: | 5407 | updatedAt: |
4979 | type: string | 5408 | type: string |
4980 | format: date-time | 5409 | format: date-time |
5410 | deletedAt: | ||
5411 | nullable: true | ||
5412 | type: string | ||
5413 | format: date-time | ||
5414 | default: null | ||
5415 | isDeleted: | ||
5416 | type: boolean | ||
5417 | default: false | ||
4981 | totalRepliesFromVideoAuthor: | 5418 | totalRepliesFromVideoAuthor: |
4982 | type: integer | 5419 | type: integer |
4983 | minimum: 0 | 5420 | minimum: 0 |
@@ -5035,7 +5472,7 @@ components: | |||
5035 | type: string | 5472 | type: string |
5036 | format: url | 5473 | format: url |
5037 | name: | 5474 | name: |
5038 | description: immutable name of the actor | 5475 | description: immutable name of the actor, used to find or mention it |
5039 | allOf: | 5476 | allOf: |
5040 | - $ref: '#/components/schemas/username' | 5477 | - $ref: '#/components/schemas/username' |
5041 | host: | 5478 | host: |
@@ -5071,7 +5508,9 @@ components: | |||
5071 | - $ref: '#/components/schemas/User/properties/id' | 5508 | - $ref: '#/components/schemas/User/properties/id' |
5072 | displayName: | 5509 | displayName: |
5073 | type: string | 5510 | type: string |
5074 | description: name displayed on the account's profile | 5511 | description: editable name of the account, displayed in its representations |
5512 | minLength: 3 | ||
5513 | maxLength: 120 | ||
5075 | description: | 5514 | description: |
5076 | type: string | 5515 | type: string |
5077 | description: text or bio displayed on the account's profile | 5516 | description: text or bio displayed on the account's profile |
@@ -5079,6 +5518,7 @@ components: | |||
5079 | properties: | 5518 | properties: |
5080 | currentTime: | 5519 | currentTime: |
5081 | type: integer | 5520 | type: integer |
5521 | format: seconds | ||
5082 | description: timestamp within the video, in seconds | 5522 | description: timestamp within the video, in seconds |
5083 | example: 5 | 5523 | example: 5 |
5084 | ServerConfig: | 5524 | ServerConfig: |
@@ -5593,7 +6033,7 @@ components: | |||
5593 | type: boolean | 6033 | type: boolean |
5594 | support: | 6034 | support: |
5595 | description: A text tell the audience how to support the video creator | 6035 | description: A text tell the audience how to support the video creator |
5596 | example: Please support my work on <insert crowdfunding plateform>! <3 | 6036 | example: Please support our work on https://soutenir.framasoft.org/en/ <3 |
5597 | type: string | 6037 | type: string |
5598 | nsfw: | 6038 | nsfw: |
5599 | description: Whether or not this video contains sensitive content | 6039 | description: Whether or not this video contains sensitive content |
@@ -5822,9 +6262,9 @@ components: | |||
5822 | UpdateUser: | 6262 | UpdateUser: |
5823 | properties: | 6263 | properties: |
5824 | email: | 6264 | email: |
5825 | type: string | ||
5826 | format: email | ||
5827 | description: The updated email of the user | 6265 | description: The updated email of the user |
6266 | allOf: | ||
6267 | - $ref: '#/components/schemas/User/properties/email' | ||
5828 | emailVerified: | 6268 | emailVerified: |
5829 | type: boolean | 6269 | type: boolean |
5830 | description: Set the email as verified | 6270 | description: Set the email as verified |
@@ -5844,28 +6284,54 @@ components: | |||
5844 | adminFlags: | 6284 | adminFlags: |
5845 | $ref: '#/components/schemas/UserAdminFlags' | 6285 | $ref: '#/components/schemas/UserAdminFlags' |
5846 | UpdateMe: | 6286 | UpdateMe: |
6287 | # see shared/models/users/user-update-me.model.ts: | ||
5847 | properties: | 6288 | properties: |
5848 | password: | 6289 | password: |
5849 | $ref: '#/components/schemas/password' | 6290 | $ref: '#/components/schemas/password' |
6291 | currentPassword: | ||
6292 | $ref: '#/components/schemas/password' | ||
5850 | email: | 6293 | email: |
6294 | description: new email used for login and service communications | ||
6295 | allOf: | ||
6296 | - $ref: '#/components/schemas/User/properties/email' | ||
6297 | displayName: | ||
5851 | type: string | 6298 | type: string |
5852 | format: email | 6299 | description: new name of the user in its representations |
5853 | description: Your new email | 6300 | minLength: 3 |
6301 | maxLength: 120 | ||
5854 | displayNSFW: | 6302 | displayNSFW: |
5855 | type: string | 6303 | type: string |
5856 | description: Your new displayNSFW | 6304 | description: new NSFW display policy |
5857 | enum: | 6305 | enum: |
5858 | - 'true' | 6306 | - 'true' |
5859 | - 'false' | 6307 | - 'false' |
5860 | - both | 6308 | - both |
6309 | webTorrentEnabled: | ||
6310 | type: boolean | ||
6311 | description: whether to enable P2P in the player or not | ||
5861 | autoPlayVideo: | 6312 | autoPlayVideo: |
5862 | type: boolean | 6313 | type: boolean |
5863 | description: Your new autoPlayVideo | 6314 | description: new preference regarding playing videos automatically |
5864 | required: | 6315 | autoPlayNextVideo: |
5865 | - password | 6316 | type: boolean |
5866 | 6317 | description: new preference regarding playing following videos automatically | |
5867 | - displayNSFW | 6318 | autoPlayNextVideoPlaylist: |
5868 | - autoPlayVideo | 6319 | type: boolean |
6320 | description: new preference regarding playing following playlist videos automatically | ||
6321 | videosHistoryEnabled: | ||
6322 | type: boolean | ||
6323 | description: whether to keep track of watched history or not | ||
6324 | videoLanguages: | ||
6325 | type: array | ||
6326 | items: | ||
6327 | type: string | ||
6328 | description: list of languages to filter videos down to | ||
6329 | theme: | ||
6330 | type: string | ||
6331 | noInstanceConfigWarningModal: | ||
6332 | type: boolean | ||
6333 | noWelcomeModal: | ||
6334 | type: boolean | ||
5869 | GetMeVideoRating: | 6335 | GetMeVideoRating: |
5870 | properties: | 6336 | properties: |
5871 | id: | 6337 | id: |
@@ -5897,38 +6363,94 @@ components: | |||
5897 | RegisterUser: | 6363 | RegisterUser: |
5898 | properties: | 6364 | properties: |
5899 | username: | 6365 | username: |
5900 | $ref: '#/components/schemas/username' | 6366 | description: immutable name of the user, used to find or mention its actor |
6367 | allOf: | ||
6368 | - $ref: '#/components/schemas/username' | ||
5901 | password: | 6369 | password: |
5902 | $ref: '#/components/schemas/password' | 6370 | $ref: '#/components/schemas/password' |
5903 | email: | 6371 | email: |
5904 | type: string | 6372 | type: string |
5905 | format: email | 6373 | format: email |
5906 | description: The email of the user | 6374 | description: email of the user, used for login or service communications |
5907 | displayName: | 6375 | displayName: |
5908 | type: string | 6376 | type: string |
5909 | description: The user display name | 6377 | description: editable name of the user, displayed in its representations |
5910 | minLength: 1 | 6378 | minLength: 1 |
5911 | maxLength: 120 | 6379 | maxLength: 120 |
5912 | channel: | 6380 | channel: |
5913 | type: object | 6381 | type: object |
6382 | description: channel base information used to create the first channel of the user | ||
5914 | properties: | 6383 | properties: |
5915 | name: | 6384 | name: |
5916 | $ref: '#/components/schemas/usernameChannel' | 6385 | $ref: '#/components/schemas/usernameChannel' |
5917 | displayName: | 6386 | displayName: |
5918 | type: string | 6387 | $ref: '#/components/schemas/VideoChannel/properties/displayName' |
5919 | description: The display name for the default channel | ||
5920 | minLength: 1 | ||
5921 | maxLength: 120 | ||
5922 | required: | 6388 | required: |
5923 | - username | 6389 | - username |
5924 | - password | 6390 | - password |
5925 | 6391 | ||
5926 | 6392 | ||
6393 | OAuthClient: | ||
6394 | properties: | ||
6395 | client_id: | ||
6396 | type: string | ||
6397 | pattern: /^[a-z0-9]$/ | ||
6398 | maxLength: 32 | ||
6399 | minLength: 32 | ||
6400 | example: v1ikx5hnfop4mdpnci8nsqh93c45rldf | ||
6401 | client_secret: | ||
6402 | type: string | ||
6403 | pattern: /^[a-zA-Z0-9]$/ | ||
6404 | maxLength: 32 | ||
6405 | minLength: 32 | ||
6406 | example: AjWiOapPltI6EnsWQwlFarRtLh4u8tDt | ||
6407 | OAuthToken-password: | ||
6408 | allOf: | ||
6409 | - $ref: '#/components/schemas/OAuthClient' | ||
6410 | - type: object | ||
6411 | properties: | ||
6412 | grant_type: | ||
6413 | type: string | ||
6414 | enum: | ||
6415 | - password | ||
6416 | - refresh_token | ||
6417 | default: password | ||
6418 | username: | ||
6419 | $ref: '#/components/schemas/User/properties/username' | ||
6420 | password: | ||
6421 | $ref: '#/components/schemas/password' | ||
6422 | required: | ||
6423 | - client_id | ||
6424 | - client_secret | ||
6425 | - grant_type | ||
6426 | - username | ||
6427 | - password | ||
6428 | OAuthToken-refresh_token: | ||
6429 | allOf: | ||
6430 | - $ref: '#/components/schemas/OAuthClient' | ||
6431 | - type: object | ||
6432 | properties: | ||
6433 | grant_type: | ||
6434 | type: string | ||
6435 | enum: | ||
6436 | - password | ||
6437 | - refresh_token | ||
6438 | default: password | ||
6439 | refresh_token: | ||
6440 | type: string | ||
6441 | example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7 | ||
6442 | required: | ||
6443 | - client_id | ||
6444 | - client_secret | ||
6445 | - grant_type | ||
6446 | - refresh_token | ||
6447 | |||
5927 | VideoChannel: | 6448 | VideoChannel: |
5928 | properties: | 6449 | properties: |
5929 | # GET/POST/PUT properties | 6450 | # GET/POST/PUT properties |
5930 | displayName: | 6451 | displayName: |
5931 | type: string | 6452 | type: string |
6453 | description: editable name of the channel, displayed in its representations | ||
5932 | example: Videos of Framasoft | 6454 | example: Videos of Framasoft |
5933 | minLength: 1 | 6455 | minLength: 1 |
5934 | maxLength: 120 | 6456 | maxLength: 120 |
@@ -5940,7 +6462,7 @@ components: | |||
5940 | support: | 6462 | support: |
5941 | type: string | 6463 | type: string |
5942 | description: text shown by default on all videos of this channel, to tell the audience how to support it | 6464 | description: text shown by default on all videos of this channel, to tell the audience how to support it |
5943 | example: Please support my work on <insert crowdfunding plateform>! <3 | 6465 | example: Please support our work on https://soutenir.framasoft.org/en/ <3 |
5944 | minLength: 3 | 6466 | minLength: 3 |
5945 | maxLength: 1000 | 6467 | maxLength: 1000 |
5946 | # GET-only properties | 6468 | # GET-only properties |