123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679 |
- openapi: 3.0.0
- info:
- title: PeerTube
- version: 3.0.1
- contact:
- name: PeerTube Community
- url: 'https://joinpeertube.org'
- license:
- name: AGPLv3.0
- url: 'https://github.com/Chocobozzz/PeerTube/blob/master/LICENSE'
- x-logo:
- url: 'https://joinpeertube.org/img/brand.png'
- altText: PeerTube Project Homepage
- description: |
- # Introduction
- The PeerTube API is built on HTTP(S) and is RESTful. You can use your favorite
- HTTP/REST library for your programming language to use PeerTube. The spec API is fully compatible with
- [openapi-generator](https://github.com/OpenAPITools/openapi-generator/wiki/API-client-generator-HOWTO)
- which generates a client SDK in the language of your choice - we generate some client SDKs automatically:
- - [Python](https://framagit.org/framasoft/peertube/clients/python)
- - [Go](https://framagit.org/framasoft/peertube/clients/go)
- - [Kotlin](https://framagit.org/framasoft/peertube/clients/kotlin)
- See the [Quick Start guide](https://docs.joinpeertube.org/#/api-rest-getting-started) so you can play with the PeerTube API.
- # Authentication
- When you sign up for an account, you are given the possibility to generate
- sessions, and authenticate using this session token. One session token can
- currently be used at a time.
- ## Roles
- Accounts are given permissions based on their role. There are three roles on
- PeerTube: Administrator, Moderator, and User. See the [roles guide](https://docs.joinpeertube.org/#/admin-managing-users?id=roles) for a detail of their permissions.
- # Errors
- The API uses standard HTTP status codes to indicate the success or failure
- of the API call. The body of the response will be JSON in the following
- format.
- ```
- {
- "code": "unauthorized_request", // example inner error code
- "error": "Token is invalid." // example exposed error message
- }
- ```
- externalDocs:
- url: https://docs.joinpeertube.org/api-rest-reference.html
- tags:
- - name: Accounts
- description: >
- Accounts encompass remote accounts discovered across the federation,
- and correspond to the main Actor, along with video channels a user can create, which
- are also Actors.
- When a comment is posted, it is done with your Account's Actor.
- - name: Users
- description: >
- Using some features of PeerTube require authentication, for which User
- provide different levels of permission as well as associated user
- information. Each user has a corresponding local Account for federation.
- - name: My User
- description: >
- Operations related to your own User, when logged-in.
- - name: My Subscriptions
- description: >
- Operations related to your subscriptions to video channels, their
- new videos, and how to keep up to date with their latest publications!
- - name: My History
- description: >
- Operations related to your watch history.
- - name: My Notifications
- description: >
- Notifications following new videos, follows or reports. They allow you
- to keep track of the interactions and overall important information that
- concerns you. You MAY set per-notification type delivery preference, to
- receive the info either by mail, by in-browser notification or both.
- - name: Config
- description: >
- Each server exposes public information regarding supported videos and
- options.
- - name: Job
- description: >
- Jobs are long-running tasks enqueued and processed by the instance
- itself. No additional worker registration is currently available.
- - name: Instance Follows
- description: >
- Managing servers which the instance interacts with is crucial to the
- concept of federation in PeerTube and external video indexation. The PeerTube
- server then deals with inter-server ActivityPub operations and propagates
- information across its social graph by posting activities to actors' inbox
- endpoints.
- externalDocs:
- url: https://docs.joinpeertube.org/#/admin-following-instances?id=instances-follows
- - name: Instance Redundancy
- description: >
- Redundancy is part of the inter-server solidarity that PeerTube fosters.
- Manage the list of instances you wish to help by seeding their videos according
- to the policy of video selection of your choice. Note that you have a similar functionality
- to mirror individual videos, see `Video Mirroring`.
- externalDocs:
- url: https://docs.joinpeertube.org/#/admin-following-instances?id=instances-redundancy
- - name: Plugins
- description: >
- Managing plugins installed from a local path or from NPM, or search for new ones.
- externalDocs:
- url: https://docs.joinpeertube.org/#/api-plugins
- - name: Abuses
- description: |
- Abuses deal with reports of local or remote videos/comments/accounts alike.
- - name: Video
- description: |
- Operations dealing with listing, uploading, fetching or modifying videos.
- - name: Search
- description: |
- The search helps to find _videos_ or _channels_ from within the instance and beyond.
- Videos from other instances federated by the instance (that is, instances
- followed by the instance) can be found via keywords and other criteria of
- the advanced search.
- Administrators can also enable the use of a remote search system, indexing
- videos and channels not could be not federated by the instance.
- - name: Video Comments
- description: >
- Operations dealing with comments to a video. Comments are organized in
- threads.
- - name: Video Playlists
- description: >
- Operations dealing with playlists of videos. Playlists are bound to users
- and/or channels.
- - name: Video Channels
- description: >
- Operations dealing with the creation, modification and listing of videos within a channel.
- - name: Video Blocks
- description: >
- Operations dealing with blocking videos (removing them from view and
- preventing interactions).
- - name: Video Rates
- description: >
- Like/dislike a video.
- - name: Feeds
- description: >
- Server syndication feeds
- x-tagGroups:
- - name: Accounts
- tags:
- - Accounts
- - Users
- - My User
- - My Subscriptions
- - My Notifications
- - My History
- - name: Videos
- tags:
- - Video
- - Video Captions
- - Video Channels
- - Video Comments
- - Video Rates
- - Video Playlists
- - Video Ownership Change
- - Video Mirroring
- - Live Videos
- - Feeds
- - name: Search
- tags:
- - Search
- - name: Moderation
- tags:
- - Abuses
- - Video Blocks
- - Account Blocks
- - Server Blocks
- - name: Instance Configuration
- tags:
- - Config
- - Instance Follows
- - Instance Redundancy
- - Plugins
- - name: Jobs
- tags:
- - Job
- paths:
- '/accounts/{name}':
- get:
- tags:
- - Accounts
- summary: Get an account
- parameters:
- - $ref: '#/components/parameters/name'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Account'
- '404':
- description: account not found
- '/accounts/{name}/videos':
- get:
- tags:
- - Accounts
- - Video
- summary: 'List videos of an account'
- parameters:
- - $ref: '#/components/parameters/name'
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/filter'
- - $ref: '#/components/parameters/skipCount'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/videosSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- x-code-samples:
- - lang: JavaScript
- source: |
- fetch('https://peertube2.cpy.re/api/v1/accounts/{name}/videos')
- .then(function(response) {
- return response.json()
- }).then(function(data) {
- console.log(data)
- })
- - lang: Shell
- source: |
- ## DEPENDENCIES: jq
- curl -s https://peertube2.cpy.re/api/v1/accounts/{name}/videos | jq
- - lang: Ruby
- source: |
- require 'net/http'
- require 'json'
- uri = URI.parse("https://peertube2.cpy.re/api/v1/accounts/{name}/videos")
- http = Net::HTTP.new(uri.host, uri.port)
- http.use_ssl = true
- response = http.get(uri.request_uri)
- puts JSON.parse(response.read_body)
- - lang: Python
- source: |
- import requests
- r = requests.get("https://peertube2.cpy.re/api/v1//accounts/{name}/videos")
- json = r.json()
- print(json)
- /accounts:
- get:
- tags:
- - Accounts
- summary: List accounts
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- 'application/json':
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Account'
- /config:
- get:
- tags:
- - Config
- summary: Get instance public configuration
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ServerConfig'
- /config/about:
- get:
- summary: Get instance "About" information
- tags:
- - Config
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ServerConfigAbout'
- /config/custom:
- get:
- summary: Get instance runtime configuration
- tags:
- - Config
- security:
- - OAuth2:
- - admin
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ServerConfigCustom'
- put:
- summary: Set instance runtime configuration
- tags:
- - Config
- security:
- - OAuth2:
- - admin
- responses:
- '200':
- description: successful operation
- '400':
- x-summary: field inconsistencies
- description: >
- Arises when:
- - the emailer is disabled and the instance is open to registrations
- - webtorrent and hls are disabled with transcoding enabled - you need at least one enabled
- delete:
- summary: Delete instance runtime configuration
- tags:
- - Config
- security:
- - OAuth2:
- - admin
- responses:
- '200':
- description: successful operation
- /jobs/{state}:
- get:
- summary: List instance jobs
- security:
- - OAuth2:
- - admin
- tags:
- - Job
- parameters:
- - name: state
- in: path
- required: true
- description: The state of the job ('' for for no filter)
- schema:
- type: string
- enum:
- - ''
- - active
- - completed
- - failed
- - waiting
- - delayed
- - $ref: '#/components/parameters/jobType'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/Job'
- '/server/following/{host}':
- delete:
- security:
- - OAuth2:
- - admin
- tags:
- - Instance Follows
- summary: Unfollow a server
- parameters:
- - name: host
- in: path
- required: true
- description: 'The host to unfollow '
- schema:
- type: string
- format: hostname
- responses:
- '201':
- description: successful operation
- /server/followers:
- get:
- tags:
- - Instance Follows
- summary: List instance followers
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Follow'
- /server/following:
- get:
- tags:
- - Instance Follows
- summary: List instances followed by the server
- parameters:
- - name: state
- in: query
- schema:
- type: string
- enum:
- - pending
- - accepted
- - name: actorType
- in: query
- schema:
- type: string
- enum:
- - Person
- - Application
- - Group
- - Service
- - Organization
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Follow'
- post:
- security:
- - OAuth2:
- - admin
- tags:
- - Instance Follows
- summary: Follow a server
- responses:
- '204':
- description: successful operation
- '500':
- description: cannot follow a non-HTTPS server
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- hosts:
- type: array
- items:
- type: string
- format: hostname
- uniqueItems: true
- /users:
- post:
- summary: Create a user
- security:
- - OAuth2:
- - admin
- tags:
- - Users
- responses:
- '200':
- description: user created
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AddUserResponse'
- links:
- # GET /users/{id}
- GetUserId:
- operationId: getUserId
- parameters:
- id: '$response.body#/user/id'
- # PUT /users/{id}
- PutUserId:
- operationId: putUserId
- parameters:
- id: '$response.body#/user/id'
- # DELETE /users/{id}
- DelUserId:
- operationId: delUserId
- parameters:
- id: '$response.body#/user/id'
- '403':
- description: insufficient authority to create an admin or moderator
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AddUser'
- description: User to create
- required: true
- get:
- summary: List users
- security:
- - OAuth2:
- - admin
- tags:
- - Users
- parameters:
- - $ref: '#/components/parameters/usersSearch'
- - $ref: '#/components/parameters/usersBlocked'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/usersSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/User'
- '/users/{id}':
- parameters:
- - $ref: '#/components/parameters/id'
- delete:
- summary: Delete a user
- security:
- - OAuth2:
- - admin
- tags:
- - Users
- operationId: delUserId
- responses:
- '204':
- description: successful operation
- get:
- summary: Get a user
- security:
- - OAuth2: []
- tags:
- - Users
- operationId: getUserId
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/User'
- put:
- summary: Update a user
- security:
- - OAuth2: []
- tags:
- - Users
- operationId: putUserId
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UpdateUser'
- required: true
- /users/register:
- post:
- summary: Register a user
- tags:
- - Users
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/RegisterUser'
- required: true
- /users/me:
- get:
- summary: Get my user information
- security:
- - OAuth2:
- - user
- tags:
- - My User
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/User'
- put:
- summary: Update my user information
- security:
- - OAuth2:
- - user
- tags:
- - My User
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UpdateMe'
- required: true
- /users/me/videos/imports:
- get:
- summary: Get video imports of my user
- security:
- - OAuth2:
- - user
- tags:
- - Videos
- - My User
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoImport'
- /users/me/video-quota-used:
- get:
- summary: Get my user used quota
- security:
- - OAuth2:
- - user
- tags:
- - My User
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: number
- '/users/me/videos/{videoId}/rating':
- get:
- summary: Get rate of my user for a video
- security:
- - OAuth2: []
- tags:
- - My User
- - Video Rates
- parameters:
- - name: videoId
- in: path
- required: true
- description: 'The video id '
- schema:
- type: string
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/GetMeVideoRating'
- /users/me/videos:
- get:
- summary: Get videos of my user
- security:
- - OAuth2:
- - user
- tags:
- - My User
- - Videos
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- /users/me/subscriptions:
- get:
- summary: Get my user subscriptions
- security:
- - OAuth2:
- - user
- tags:
- - My Subscriptions
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- post:
- tags:
- - My Subscriptions
- summary: Add subscription to my user
- security:
- - OAuth2:
- - user
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- uri:
- type: string
- format: uri
- description: uri of the video channels to subscribe to
- required:
- - uri
- examples:
- default:
- value:
- uri: 008a0e54-375d-49d0-8379-143202e24152@video.lqdn.fr
- responses:
- '200':
- description: successful operation
- /users/me/subscriptions/exist:
- get:
- summary: Get if subscriptions exist for my user
- security:
- - OAuth2:
- - user
- tags:
- - My Subscriptions
- parameters:
- - $ref: '#/components/parameters/subscriptionsUris'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- /users/me/subscriptions/videos:
- get:
- summary: List videos of subscriptions of my user
- security:
- - OAuth2:
- - user
- tags:
- - My Subscriptions
- - Videos
- parameters:
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/filter'
- - $ref: '#/components/parameters/skipCount'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/videosSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- '/users/me/subscriptions/{subscriptionHandle}':
- get:
- summary: Get subscription of my user
- security:
- - OAuth2:
- - user
- tags:
- - My Subscriptions
- parameters:
- - $ref: '#/components/parameters/subscriptionHandle'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannel'
- delete:
- summary: Delete subscription of my user
- security:
- - OAuth2:
- - user
- tags:
- - My Subscriptions
- parameters:
- - $ref: '#/components/parameters/subscriptionHandle'
- responses:
- '200':
- description: successful operation
- /users/me/notifications:
- get:
- summary: List my notifications
- security:
- - OAuth2: []
- tags:
- - My Notifications
- parameters:
- - name: unread
- in: query
- description: only list unread notifications
- schema:
- type: boolean
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/NotificationListResponse'
- /users/me/notifications/read:
- post:
- summary: Mark notifications as read by their id
- security:
- - OAuth2: []
- tags:
- - My Notifications
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- ids:
- type: array
- description: ids of the notifications to mark as read
- items:
- type: integer
- required:
- - ids
- responses:
- '204':
- description: successful operation
- /users/me/notifications/read-all:
- post:
- summary: Mark all my notification as read
- security:
- - OAuth2: []
- tags:
- - My Notifications
- responses:
- '204':
- description: successful operation
- /users/me/notification-settings:
- put:
- summary: Update my notification settings
- security:
- - OAuth2: []
- tags:
- - My Notifications
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- newVideoFromSubscription:
- $ref: '#/components/schemas/NotificationSettingValue'
- newCommentOnMyVideo:
- $ref: '#/components/schemas/NotificationSettingValue'
- abuseAsModerator:
- $ref: '#/components/schemas/NotificationSettingValue'
- videoAutoBlacklistAsModerator:
- $ref: '#/components/schemas/NotificationSettingValue'
- blacklistOnMyVideo:
- $ref: '#/components/schemas/NotificationSettingValue'
- myVideoPublished:
- $ref: '#/components/schemas/NotificationSettingValue'
- myVideoImportFinished:
- $ref: '#/components/schemas/NotificationSettingValue'
- newFollow:
- $ref: '#/components/schemas/NotificationSettingValue'
- newUserRegistration:
- $ref: '#/components/schemas/NotificationSettingValue'
- commentMention:
- $ref: '#/components/schemas/NotificationSettingValue'
- newInstanceFollower:
- $ref: '#/components/schemas/NotificationSettingValue'
- autoInstanceFollowing:
- $ref: '#/components/schemas/NotificationSettingValue'
- responses:
- '204':
- description: successful operation
- /users/me/history/videos:
- get:
- summary: List watched videos history
- security:
- - OAuth2: []
- tags:
- - My History
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/search'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- /users/me/history/videos/remove:
- post:
- summary: Clear video history
- security:
- - OAuth2: []
- tags:
- - My History
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- beforeDate:
- description: history before this date will be deleted
- type: string
- format: date-time
- responses:
- '204':
- description: successful operation
- /users/me/avatar/pick:
- post:
- summary: Update my user avatar
- security:
- - OAuth2: []
- tags:
- - My User
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Avatar'
- '413':
- description: image file too large
- headers:
- X-File-Maximum-Size:
- schema:
- type: string
- format: Nginx size
- description: Maximum file size for the avatar
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- avatarfile:
- description: The file to upload.
- type: string
- format: binary
- encoding:
- avatarfile:
- contentType: image/png, image/jpeg
- /videos/ownership:
- get:
- summary: List video ownership changes
- tags:
- - Video Ownership Change
- security:
- - OAuth2: []
- responses:
- '200':
- description: successful operation
- '/videos/ownership/{id}/accept':
- post:
- summary: Accept ownership change request
- tags:
- - Video Ownership Change
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '403':
- description: cannot terminate an ownership change of another user
- '404':
- description: video owneship change not found
- '/videos/ownership/{id}/refuse':
- post:
- summary: Refuse ownership change request
- tags:
- - Video Ownership Change
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '403':
- description: cannot terminate an ownership change of another user
- '404':
- description: video owneship change not found
- '/videos/{id}/give-ownership':
- post:
- summary: Request ownership change
- tags:
- - Video Ownership Change
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- required: true
- content:
- application/x-www-form-urlencoded:
- schema:
- type: object
- properties:
- username:
- type: string
- required:
- - username
- responses:
- '204':
- description: successful operation
- '400':
- description: changing video ownership to a remote account is not supported yet
- '404':
- description: video not found
- /videos:
- get:
- summary: List videos
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/filter'
- - $ref: '#/components/parameters/skipCount'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/videosSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- /videos/categories:
- get:
- summary: List available video categories
- tags:
- - Video
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- type: string
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/api/v1/videos/categories
- /videos/licences:
- get:
- summary: List available video licences
- tags:
- - Video
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- type: string
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/api/v1/videos/licences
- /videos/languages:
- get:
- summary: List available video languages
- tags:
- - Video
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- type: string
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/api/v1/videos/languages
- /videos/privacies:
- get:
- summary: List available video privacies
- tags:
- - Video
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- type: string
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/api/v1/videos/privacies
- '/videos/{id}':
- put:
- summary: Update a video
- security:
- - OAuth2: []
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- thumbnailfile:
- description: Video thumbnail file
- type: string
- format: binary
- previewfile:
- description: Video preview file
- type: string
- format: binary
- category:
- description: Video category
- type: integer
- example: 4
- licence:
- description: Video licence
- type: integer
- example: 2
- language:
- description: Video language
- type: string
- privacy:
- $ref: '#/components/schemas/VideoPrivacySet'
- description:
- description: Video description
- type: string
- waitTranscoding:
- description: Whether or not we wait transcoding before publish the video
- type: string
- support:
- description: A text tell the audience how to support the video creator
- example: Please support my work on <insert crowdfunding plateform>! <3
- type: string
- nsfw:
- description: Whether or not this video contains sensitive content
- type: boolean
- name:
- description: Video name
- type: string
- tags:
- description: Video tags (maximum 5 tags each between 2 and 30 characters)
- type: array
- minItems: 1
- maxItems: 5
- items:
- type: string
- minLength: 2
- maxLength: 30
- commentsEnabled:
- description: Enable or disable comments for this video
- type: boolean
- originallyPublishedAt:
- description: Date when the content was originally published
- type: string
- format: date-time
- scheduleUpdate:
- $ref: '#/components/schemas/VideoScheduledUpdate'
- encoding:
- thumbnailfile:
- contentType: image/jpeg
- previewfile:
- contentType: image/jpeg
- get:
- summary: Get a video
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoDetails'
- delete:
- summary: Delete a video
- security:
- - OAuth2: []
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '/videos/{id}/description':
- get:
- summary: Get complete video description
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: string
- '/videos/{id}/views':
- post:
- summary: Add a view to a video
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '/videos/{id}/watching':
- put:
- summary: Set watching progress of a video
- tags:
- - Video
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UserWatchingVideo'
- required: true
- responses:
- '204':
- description: successful operation
- /videos/upload:
- post:
- summary: Upload a video
- security:
- - OAuth2: []
- tags:
- - Video
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoUploadResponse'
- '400':
- description: invalid file field, schedule date or parameter
- '403':
- description: video didn't pass upload filter
- '408':
- description: upload has timed out
- '413':
- description: video file too large, due to quota or max body size limit set by the reverse-proxy
- headers:
- X-File-Maximum-Size:
- schema:
- type: string
- format: Nginx size
- description: Maximum file size for the video
- '415':
- description: video type unsupported
- '422':
- description: video unreadable
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- videofile:
- description: Video file
- type: string
- format: binary
- channelId:
- description: Channel id that will contain this video
- type: integer
- thumbnailfile:
- description: Video thumbnail file
- type: string
- format: binary
- previewfile:
- description: Video preview file
- type: string
- format: binary
- privacy:
- $ref: '#/components/schemas/VideoPrivacySet'
- category:
- description: Video category
- type: integer
- example: 4
- licence:
- description: Video licence
- type: string
- language:
- description: Video language
- type: integer
- example: 2
- description:
- description: Video description
- type: string
- waitTranscoding:
- description: Whether or not we wait transcoding before publish the video
- type: boolean
- support:
- description: A text tell the audience how to support the video creator
- example: Please support my work on <insert crowdfunding plateform>! <3
- type: string
- nsfw:
- description: Whether or not this video contains sensitive content
- type: boolean
- name:
- description: Video name
- type: string
- tags:
- description: Video tags (maximum 5 tags each between 2 and 30 characters)
- type: array
- minItems: 1
- maxItems: 5
- uniqueItems: true
- items:
- type: string
- minLength: 2
- maxLength: 30
- commentsEnabled:
- description: Enable or disable comments for this video
- type: boolean
- downloadEnabled:
- description: Enable or disable downloading for this video
- type: boolean
- originallyPublishedAt:
- description: Date when the content was originally published
- type: string
- format: date-time
- scheduleUpdate:
- $ref: '#/components/schemas/VideoScheduledUpdate'
- required:
- - videofile
- - channelId
- - name
- encoding:
- videofile:
- contentType: video/mp4, video/webm, video/ogg, video/avi, video/quicktime, video/x-msvideo, video/x-flv, video/x-matroska, application/octet-stream
- thumbnailfile:
- contentType: image/jpeg
- previewfile:
- contentType: image/jpeg
- x-code-samples:
- - lang: Shell
- source: |
- ## DEPENDENCIES: jq
- USERNAME="<your_username>"
- PASSWORD="<your_password>"
- FILE_PATH="<your_file_path>"
- CHANNEL_ID="<your_channel_id>"
- NAME="<video_name>"
- API_PATH="https://peertube2.cpy.re/api/v1"
- ## AUTH
- client_id=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_id")
- client_secret=$(curl -s "$API_PATH/oauth-clients/local" | jq -r ".client_secret")
- token=$(curl -s "$API_PATH/users/token" \
- --data client_id="$client_id" \
- --data client_secret="$client_secret" \
- --data grant_type=password \
- --data response_type=code \
- --data username="$USERNAME" \
- --data password="$PASSWORD" \
- | jq -r ".access_token")
- ## VIDEO UPLOAD
- curl -s "$API_PATH/videos/upload" \
- -H "Authorization: Bearer $token" \
- --max-time 600 \
- --form videofile=@"$FILE_PATH" \
- --form channelId=$CHANNEL_ID \
- --form name="$NAME"
- /videos/imports:
- post:
- summary: Import a video
- description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
- security:
- - OAuth2: []
- tags:
- - Video
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- torrentfile:
- description: Torrent File
- type: string
- format: binary
- targetUrl:
- description: HTTP target URL
- type: string
- magnetUri:
- description: Magnet URI
- type: string
- channelId:
- description: Channel id that will contain this video
- type: integer
- thumbnailfile:
- description: Video thumbnail file
- type: string
- format: binary
- previewfile:
- description: Video preview file
- type: string
- format: binary
- privacy:
- $ref: '#/components/schemas/VideoPrivacySet'
- category:
- description: Video category
- type: string
- licence:
- description: Video licence
- type: string
- language:
- description: Video language
- type: string
- description:
- description: Video description
- type: string
- waitTranscoding:
- description: Whether or not we wait transcoding before publish the video
- type: boolean
- support:
- description: A text tell the audience how to support the video creator
- example: Please support my work on <insert crowdfunding plateform>! <3
- type: string
- nsfw:
- description: Whether or not this video contains sensitive content
- type: boolean
- name:
- description: Video name
- type: string
- tags:
- description: Video tags (maximum 5 tags each between 2 and 30 characters)
- type: array
- minItems: 1
- maxItems: 5
- items:
- type: string
- minLength: 2
- maxLength: 30
- commentsEnabled:
- description: Enable or disable comments for this video
- type: boolean
- downloadEnabled:
- description: Enable or disable downloading for this video
- type: boolean
- scheduleUpdate:
- $ref: '#/components/schemas/VideoScheduledUpdate'
- required:
- - channelId
- - name
- encoding:
- torrentfile:
- contentType: application/x-bittorrent
- thumbnailfile:
- contentType: image/jpeg
- previewfile:
- contentType: image/jpeg
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoUploadResponse'
- '400':
- description: '`magnetUri` or `targetUrl` or a torrent file missing'
- '403':
- description: video didn't pass pre-import filter
- '409':
- description: HTTP or Torrent/magnetURI import not enabled
- /videos/live:
- post:
- summary: Create a live
- security:
- - OAuth2: []
- tags:
- - Live Videos
- - Video
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoUploadResponse'
- '403':
- description: Live is not enabled, allow replay is not enabled, or max instance/user live videos limit is exceeded
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- channelId:
- description: Channel id that will contain this live video
- type: integer
- saveReplay:
- type: boolean
- permanentLive:
- description: User can stream multiple times in a permanent live
- type: boolean
- thumbnailfile:
- description: Live video/replay thumbnail file
- type: string
- format: binary
- previewfile:
- description: Live video/replay preview file
- type: string
- format: binary
- privacy:
- $ref: '#/components/schemas/VideoPrivacySet'
- category:
- description: Live video/replay category
- type: string
- licence:
- description: Live video/replay licence
- type: string
- language:
- description: Live video/replay language
- type: string
- description:
- description: Live video/replay description
- type: string
- support:
- description: A text tell the audience how to support the creator
- example: Please support my work on <insert crowdfunding plateform>! <3
- type: string
- nsfw:
- description: Whether or not this live video/replay contains sensitive content
- type: boolean
- name:
- description: Live video/replay name
- type: string
- tags:
- description: Live video/replay tags (maximum 5 tags each between 2 and 30 characters)
- type: array
- minItems: 1
- maxItems: 5
- items:
- type: string
- minLength: 2
- maxLength: 30
- commentsEnabled:
- description: Enable or disable comments for this live video/replay
- type: boolean
- downloadEnabled:
- description: Enable or disable downloading for the replay of this live
- type: boolean
- required:
- - channelId
- - name
- encoding:
- thumbnailfile:
- contentType: image/jpeg
- previewfile:
- contentType: image/jpeg
- /videos/live/{id}:
- get:
- summary: Get a live information
- security:
- - OAuth2: []
- tags:
- - Live Videos
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/LiveVideoResponse'
- put:
- summary: Update a live information
- security:
- - OAuth2: []
- tags:
- - Live Videos
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/LiveVideoUpdate'
- responses:
- '204':
- description: Successful operation
- '400':
- description: Bad parameters or trying to update a live that has already started
- '403':
- description: Trying to save replay of the live but saving replay is not enabled on the instance
- /users/me/abuses:
- get:
- summary: List my abuses
- security:
- - OAuth2: []
- tags:
- - Abuses
- - My User
- parameters:
- - name: id
- in: query
- description: only list the report with this id
- schema:
- type: integer
- - name: state
- in: query
- schema:
- $ref: '#/components/schemas/AbuseStateSet'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/abusesSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Abuse'
- /abuses:
- get:
- summary: List abuses
- security:
- - OAuth2:
- - admin
- - moderator
- tags:
- - Abuses
- parameters:
- - name: id
- in: query
- description: only list the report with this id
- schema:
- type: integer
- - name: predefinedReason
- in: query
- description: predefined reason the listed reports should contain
- schema:
- $ref: '#/components/schemas/PredefinedAbuseReasons'
- - name: search
- in: query
- description: plain search that will match with video titles, reporter names and more
- schema:
- type: string
- - name: state
- in: query
- schema:
- $ref: '#/components/schemas/AbuseStateSet'
- - name: searchReporter
- in: query
- description: only list reports of a specific reporter
- schema:
- type: string
- - name: searchReportee
- description: only list reports of a specific reportee
- in: query
- schema:
- type: string
- - name: searchVideo
- in: query
- description: only list reports of a specific video
- schema:
- type: string
- - name: searchVideoChannel
- in: query
- description: only list reports of a specific video channel
- schema:
- type: string
- - name: videoIs
- in: query
- description: only list blacklisted or deleted videos
- schema:
- type: string
- enum:
- - 'deleted'
- - 'blacklisted'
- - name: filter
- in: query
- description: only list account, comment or video reports
- schema:
- type: string
- enum:
- - 'video'
- - 'comment'
- - 'account'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/abusesSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/Abuse'
- post:
- summary: Report an abuse
- security:
- - OAuth2: []
- tags:
- - Abuses
- requestBody:
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- reason:
- description: Reason why the user reports this video
- type: string
- minLength: 4
- predefinedReasons:
- $ref: '#/components/schemas/PredefinedAbuseReasons'
- video:
- type: object
- properties:
- id:
- description: Video id to report
- type: number
- startAt:
- type: integer
- description: Timestamp in the video that marks the beginning of the report
- minimum: 0
- endAt:
- type: integer
- description: Timestamp in the video that marks the ending of the report
- minimum: 0
- comment:
- type: object
- properties:
- id:
- description: Comment id to report
- type: number
- account:
- type: object
- properties:
- id:
- description: Account id to report
- type: number
- required:
- - reason
- responses:
- '204':
- description: successful operation
- '400':
- description: incorrect request parameters
- '/abuses/{abuseId}':
- put:
- summary: Update an abuse
- security:
- - OAuth2:
- - admin
- - moderator
- tags:
- - Abuses
- parameters:
- - $ref: '#/components/parameters/abuseId'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- state:
- $ref: '#/components/schemas/AbuseStateSet'
- moderationComment:
- type: string
- description: Update the report comment visible only to the moderation team
- responses:
- '204':
- description: successful operation
- '404':
- description: abuse not found
- delete:
- tags:
- - Abuses
- summary: Delete an abuse
- security:
- - OAuth2:
- - admin
- - moderator
- parameters:
- - $ref: '#/components/parameters/abuseId'
- responses:
- '204':
- description: successful operation
- '404':
- description: block not found
- '/abuses/{abuseId}/messages':
- get:
- summary: List messages of an abuse
- security:
- - OAuth2: []
- tags:
- - Abuses
- parameters:
- - $ref: '#/components/parameters/abuseId'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/AbuseMessage'
- post:
- summary: Add message to an abuse
- security:
- - OAuth2: []
- tags:
- - Abuses
- parameters:
- - $ref: '#/components/parameters/abuseId'
- requestBody:
- required: true
- content:
- application/json:
- schema:
- type: object
- properties:
- message:
- description: Message to send
- type: string
- required:
- - message
- responses:
- '200':
- description: successful operation
- '400':
- description: incorrect request parameters
- '/abuses/{abuseId}/messages/{abuseMessageId}':
- delete:
- summary: Delete an abuse message
- security:
- - OAuth2: []
- tags:
- - Abuses
- parameters:
- - $ref: '#/components/parameters/abuseId'
- - $ref: '#/components/parameters/abuseMessageId'
- responses:
- '204':
- description: successful operation
- '/videos/{id}/blacklist':
- post:
- summary: Block a video
- security:
- - OAuth2:
- - admin
- - moderator
- tags:
- - Video Blocks
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- delete:
- summary: Unblock a video by its id
- security:
- - OAuth2:
- - admin
- - moderator
- tags:
- - Video Blocks
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '404':
- description: block not found
- /videos/blacklist:
- get:
- tags:
- - Video Blocks
- summary: List video blocks
- security:
- - OAuth2:
- - admin
- - moderator
- parameters:
- - name: type
- in: query
- description: >
- list only blocks that match this type:
- - `1`: manual block
- - `2`: automatic block that needs review
- schema:
- type: integer
- enum:
- - 1
- - 2
- - name: search
- in: query
- description: plain search that will match with video titles, and more
- schema:
- type: string
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/blacklistsSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/VideoBlacklist'
- /videos/{id}/captions:
- get:
- summary: List captions of a video
- tags:
- - Video Captions
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/VideoCaption'
- /videos/{id}/captions/{captionLanguage}:
- put:
- summary: Add or replace a video caption
- security:
- - OAuth2:
- - user
- tags:
- - Video Captions
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/captionLanguage'
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- captionfile:
- description: The file to upload.
- type: string
- format: binary
- encoding:
- captionfile:
- contentType: text/vtt, application/x-subrip, text/plain
- responses:
- '204':
- description: successful operation
- '404':
- description: video or language not found
- delete:
- summary: Delete a video caption
- security:
- - OAuth2:
- - user
- tags:
- - Video Captions
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/captionLanguage'
- responses:
- '204':
- description: successful operation
- '404':
- description: video or language or caption for that language not found
- /video-channels:
- get:
- summary: List video channels
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/VideoChannel'
- post:
- summary: Create a video channel
- security:
- - OAuth2: []
- tags:
- - Video Channels
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannelCreate'
- '/video-channels/{channelHandle}':
- get:
- summary: Get a video channel
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannel'
- put:
- summary: Update a video channel
- security:
- - OAuth2: []
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannelUpdate'
- delete:
- summary: Delete a video channel
- security:
- - OAuth2: []
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '204':
- description: successful operation
- '/video-channels/{channelHandle}/videos':
- get:
- summary: List videos of a video channel
- tags:
- - Video
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/filter'
- - $ref: '#/components/parameters/skipCount'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/videosSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- /video-playlists/privacies:
- get:
- summary: List available playlist privacies
- tags:
- - Video Playlists
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- type: string
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/api/v1/video-playlists/privacies
- /video-playlists:
- get:
- summary: List video playlists
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/VideoPlaylist'
- post:
- summary: Create a video playlist
- description: 'If the video playlist is set as public, the videoChannelId is mandatory.'
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- videoPlaylist:
- type: object
- properties:
- id:
- type: integer
- uuid:
- type: string
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- displayName:
- description: Video playlist display name
- type: string
- thumbnailfile:
- description: Video playlist thumbnail file
- type: string
- format: binary
- privacy:
- $ref: '#/components/schemas/VideoPlaylistPrivacySet'
- description:
- description: Video playlist description
- type: string
- videoChannelId:
- description: Video channel in which the playlist will be published
- type: integer
- required:
- - displayName
- encoding:
- thumbnailfile:
- contentType: image/jpeg
- /video-playlists/{id}:
- get:
- summary: Get a video playlist
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoPlaylist'
- put:
- summary: Update a video playlist
- description: 'If the video playlist is set as public, the playlist must have a assigned channel.'
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- responses:
- '204':
- description: successful operation
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- displayName:
- description: Video playlist display name
- type: string
- thumbnailfile:
- description: Video playlist thumbnail file
- type: string
- format: binary
- privacy:
- $ref: '#/components/schemas/VideoPlaylistPrivacySet'
- description:
- description: Video playlist description
- type: string
- videoChannelId:
- description: Video channel in which the playlist will be published
- type: integer
- encoding:
- thumbnailfile:
- contentType: image/jpeg
- delete:
- summary: Delete a video playlist
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- /video-playlists/{id}/videos:
- get:
- summary: 'List videos of a playlist'
- tags:
- - Videos
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- post:
- summary: 'Add a video in a playlist'
- security:
- - OAuth2: []
- tags:
- - Videos
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- videoPlaylistElement:
- type: object
- properties:
- id:
- type: integer
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- videoId:
- type: integer
- description: 'Video to add in the playlist'
- startTimestamp:
- type: integer
- description: 'Start the video at this specific timestamp (in seconds)'
- stopTimestamp:
- type: integer
- description: 'Stop the video at this specific timestamp (in seconds)'
- required:
- - videoId
- /video-playlists/{id}/videos/reorder:
- post:
- summary: 'Reorder a playlist'
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- startPosition:
- type: integer
- description: 'Start position of the element to reorder'
- minimum: 1
- insertAfterPosition:
- type: integer
- description: 'New position for the block to reorder, to add the block before the first element'
- minimum: 0
- reorderLength:
- type: integer
- description: 'How many element from `startPosition` to reorder'
- minimum: 1
- required:
- - startPosition
- - insertAfterPosition
- /video-playlists/{id}/videos/{playlistElementId}:
- put:
- summary: 'Update a playlist element'
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/playlistElementId'
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- startTimestamp:
- type: integer
- description: 'Start the video at this specific timestamp (in seconds)'
- stopTimestamp:
- type: integer
- description: 'Stop the video at this specific timestamp (in seconds)'
- delete:
- summary: 'Delete an element from a playlist'
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/playlistElementId'
- responses:
- '204':
- description: successful operation
- '/users/me/video-playlists/videos-exist':
- get:
- summary: 'Check video exists in my playlists'
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - name: videoIds
- in: query
- required: true
- description: The video ids to check
- schema:
- type: array
- items:
- type: integer
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- videoId:
- type: array
- items:
- type: object
- properties:
- playlistElementId:
- type: integer
- playlistId:
- type: integer
- startTimestamp:
- type: integer
- stopTimestamp:
- type: integer
- '/accounts/{name}/video-channels':
- get:
- summary: List video channels of an account
- tags:
- - Video Channels
- - Accounts
- parameters:
- - $ref: '#/components/parameters/name'
- - name: withStats
- in: query
- description: include view statistics for the last 30 days (only if authentified as the account user)
- schema:
- type: boolean
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/VideoChannel'
- '/accounts/{name}/ratings':
- get:
- summary: List ratings of an account
- security:
- - OAuth2: []
- tags:
- - Accounts
- parameters:
- - $ref: '#/components/parameters/name'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- - name: rating
- in: query
- required: false
- description: Optionally filter which ratings to retrieve
- schema:
- type: string
- enum:
- - like
- - dislike
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/VideoRating'
- '/videos/{id}/comment-threads':
- get:
- summary: List threads of a video
- tags:
- - Video Comments
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/commentsSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CommentThreadResponse'
- post:
- summary: Create a thread
- security:
- - OAuth2: []
- tags:
- - Video Comments
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CommentThreadPostResponse'
- '404':
- description: video does not exist
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- text:
- type: string
- description: 'Text comment'
- required:
- - text
- '/videos/{id}/comment-threads/{threadId}':
- get:
- summary: Get a thread
- tags:
- - Video Comments
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/threadId'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoCommentThreadTree'
- '/videos/{id}/comments/{commentId}':
- post:
- summary: Reply to a thread of a video
- security:
- - OAuth2: []
- tags:
- - Video Comments
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/commentId'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CommentThreadPostResponse'
- '404':
- description: thread or video does not exist
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- text:
- type: string
- description: 'Text comment'
- required:
- - text
- delete:
- summary: Delete a comment or a reply
- security:
- - OAuth2: []
- tags:
- - Video Comments
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - $ref: '#/components/parameters/commentId'
- responses:
- '204':
- description: successful operation
- '403':
- description: cannot remove comment of another user
- '404':
- description: comment or video does not exist
- '409':
- description: comment is already deleted
- '/videos/{id}/rate':
- put:
- summary: Like/dislike a video
- security:
- - OAuth2: []
- tags:
- - Video Rates
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '404':
- description: video does not exist
- /search/videos:
- get:
- tags:
- - Search
- summary: Search videos
- parameters:
- - name: search
- in: query
- required: true
- allowEmptyValue: false
- description: >
- String to search. If the user can make a remote URI search, and the string is an URI then the
- PeerTube instance will fetch the remote object and add it to its database. Then,
- you can use the REST API to fetch the complete video information and interact with it.
- schema:
- type: string
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/filter'
- - $ref: '#/components/parameters/skipCount'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/searchTarget'
- - $ref: '#/components/parameters/videosSearchSort'
- - name: startDate
- in: query
- description: Get videos that are published after this date
- schema:
- type: string
- format: date-time
- - name: endDate
- in: query
- description: Get videos that are published before this date
- schema:
- type: string
- format: date-time
- - name: originallyPublishedStartDate
- in: query
- description: Get videos that are originally published after this date
- schema:
- type: string
- format: date-time
- - name: originallyPublishedEndDate
- in: query
- description: Get videos that are originally published before this date
- schema:
- type: string
- format: date-time
- - name: durationMin
- in: query
- description: Get videos that have this minimum duration
- schema:
- type: integer
- - name: durationMax
- in: query
- description: Get videos that have this maximum duration
- schema:
- type: integer
- callbacks:
- 'searchTarget === search-index':
- $ref: '#/components/callbacks/searchIndex'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- '500':
- description: search index unavailable
- /search/video-channels:
- get:
- tags:
- - Search
- summary: Search channels
- parameters:
- - name: search
- in: query
- required: true
- description: >
- String to search. If the user can make a remote URI search, and the string is an URI then the
- PeerTube instance will fetch the remote object and add it to its database. Then,
- you can use the REST API to fetch the complete channel information and interact with it.
- schema:
- type: string
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/searchTarget'
- - $ref: '#/components/parameters/sort'
- callbacks:
- 'searchTarget === search-index':
- $ref: '#/components/callbacks/searchIndex'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/VideoChannel'
- '500':
- description: search index unavailable
- /blocklist/accounts:
- get:
- tags:
- - Account Blocks
- summary: List account blocks
- security:
- - OAuth2:
- - admin
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- post:
- tags:
- - Account Blocks
- summary: Block an account
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- accountName:
- type: string
- example: chocobozzz@example.org
- description: account to block, in the form `username@domain`
- required:
- - accountName
- responses:
- '200':
- description: successful operation
- '409':
- description: self-blocking forbidden
- '/blocklist/accounts/{accountName}':
- delete:
- tags:
- - Account Blocks
- summary: Unblock an account by its handle
- security:
- - OAuth2:
- - admin
- parameters:
- - name: accountName
- in: path
- required: true
- description: account to unblock, in the form `username@domain`
- schema:
- type: string
- responses:
- '201':
- description: successful operation
- '404':
- description: account or account block does not exist
- /blocklist/servers:
- get:
- tags:
- - Server Blocks
- summary: List server blocks
- security:
- - OAuth2:
- - admin
- parameters:
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- post:
- tags:
- - Server Blocks
- summary: Block a server
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- host:
- type: string
- format: hostname
- description: server domain to block
- required:
- - host
- responses:
- '200':
- description: successful operation
- '409':
- description: self-blocking forbidden
- '/blocklist/servers/{host}':
- delete:
- tags:
- - Server Blocks
- summary: Unblock a server by its domain
- security:
- - OAuth2:
- - admin
- parameters:
- - name: host
- in: path
- required: true
- description: server domain to unblock
- schema:
- type: string
- format: hostname
- responses:
- '201':
- description: successful operation
- '404':
- description: account block does not exist
- /redundancy/{host}:
- put:
- tags:
- - Instance Redundancy
- summary: Update a server redundancy policy
- security:
- - OAuth2:
- - admin
- parameters:
- - name: host
- in: path
- required: true
- description: server domain to mirror
- schema:
- type: string
- format: hostname
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- redundancyAllowed:
- type: boolean
- description: allow mirroring of the host's local videos
- required:
- - redundancyAllowed
- responses:
- '204':
- description: successful operation
- '404':
- description: server is not already known
- /redundancy/videos:
- get:
- tags:
- - Video Mirroring
- summary: List videos being mirrored
- security:
- - OAuth2:
- - admin
- parameters:
- - name: target
- in: query
- required: true
- description: direction of the mirror
- schema:
- type: string
- enum:
- - my-videos
- - remote-videos
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/videoRedundanciesSort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/VideoRedundancy'
- post:
- tags:
- - Video Mirroring
- summary: Mirror a video
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- videoId:
- type: integer
- required:
- - videoId
- responses:
- '204':
- description: successful operation
- '400':
- description: cannot mirror a local video
- '404':
- description: video does not exist
- '409':
- description: video is already mirrored
- /redundancy/videos/{redundancyId}:
- delete:
- tags:
- - Video Mirroring
- summary: Delete a mirror done on a video
- security:
- - OAuth2:
- - admin
- parameters:
- - name: redundancyId
- in: path
- required: true
- description: id of an existing redundancy on a video
- schema:
- type: string
- responses:
- '204':
- description: successful operation
- '404':
- description: video redundancy not found
- '/feeds/video-comments.{format}':
- get:
- tags:
- - Feeds
- summary: List comments on videos
- servers:
- - url: 'https://peertube2.cpy.re'
- description: Live Test Server (live data - latest nightly version)
- - url: 'https://peertube3.cpy.re'
- description: Live Test Server (live data - latest RC version)
- - url: 'https://peertube.cpy.re'
- description: Live Test Server (live data - stable version)
- parameters:
- - name: format
- in: path
- required: true
- description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
- schema:
- type: string
- enum:
- - xml
- - rss
- - rss2
- - atom
- - atom1
- - json
- - json1
- - name: videoId
- in: query
- description: 'limit listing to a specific video'
- schema:
- type: string
- - name: accountId
- in: query
- description: 'limit listing to a specific account'
- schema:
- type: string
- - name: accountName
- in: query
- description: 'limit listing to a specific account'
- schema:
- type: string
- - name: videoChannelId
- in: query
- description: 'limit listing to a specific video channel'
- schema:
- type: string
- - name: videoChannelName
- in: query
- description: 'limit listing to a specific video channel'
- schema:
- type: string
- responses:
- '204':
- description: successful operation
- headers:
- Cache-Control:
- schema:
- type: string
- default: 'max-age=900' # 15 min cache
- content:
- application/xml:
- schema:
- $ref: '#/components/schemas/VideoCommentsForXML'
- application/rss+xml:
- schema:
- $ref: '#/components/schemas/VideoCommentsForXML'
- text/xml:
- schema:
- $ref: '#/components/schemas/VideoCommentsForXML'
- application/atom+xml:
- schema:
- $ref: '#/components/schemas/VideoCommentsForXML'
- application/json:
- schema:
- type: object
- '400':
- x-summary: field inconsistencies
- description: >
- Arises when:
- - videoId filter is mixed with a channel filter
- '404':
- description: video, video channel or account not found
- '406':
- description: accept header unsupported
- '/feeds/videos.{format}':
- get:
- tags:
- - Feeds
- summary: List videos
- servers:
- - url: 'https://peertube2.cpy.re'
- description: Live Test Server (live data - latest nightly version)
- - url: 'https://peertube3.cpy.re'
- description: Live Test Server (live data - latest RC version)
- - url: 'https://peertube.cpy.re'
- description: Live Test Server (live data - stable version)
- parameters:
- - name: format
- in: path
- required: true
- description: 'format expected (we focus on making `rss` the most featureful ; it serves [Media RSS](https://www.rssboard.org/media-rss))'
- schema:
- type: string
- enum:
- - xml
- - rss
- - rss2
- - atom
- - atom1
- - json
- - json1
- - name: accountId
- in: query
- description: 'limit listing to a specific account'
- schema:
- type: string
- - name: accountName
- in: query
- description: 'limit listing to a specific account'
- schema:
- type: string
- - name: videoChannelId
- in: query
- description: 'limit listing to a specific video channel'
- schema:
- type: string
- - name: videoChannelName
- in: query
- description: 'limit listing to a specific video channel'
- schema:
- type: string
- - $ref: '#/components/parameters/sort'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/filter'
- responses:
- '204':
- description: successful operation
- headers:
- Cache-Control:
- schema:
- type: string
- default: 'max-age=900' # 15 min cache
- content:
- application/xml:
- schema:
- $ref: '#/components/schemas/VideosForXML'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
- application/rss+xml:
- schema:
- $ref: '#/components/schemas/VideosForXML'
- text/xml:
- schema:
- $ref: '#/components/schemas/VideosForXML'
- application/atom+xml:
- schema:
- $ref: '#/components/schemas/VideosForXML'
- application/json:
- schema:
- type: object
- '404':
- description: video channel or account not found
- '406':
- description: accept header unsupported
- /plugins:
- get:
- tags:
- - Plugins
- summary: List plugins
- security:
- - OAuth2:
- - admin
- parameters:
- - name: pluginType
- in: query
- schema:
- type: integer
- - name: uninstalled
- in: query
- schema:
- type: boolean
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PluginResponse'
- /plugins/available:
- get:
- tags:
- - Plugins
- summary: List available plugins
- security:
- - OAuth2:
- - admin
- parameters:
- - name: search
- in: query
- schema:
- type: string
- - name: pluginType
- in: query
- schema:
- type: integer
- - name: currentPeerTubeEngine
- in: query
- schema:
- type: string
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PluginResponse'
- '503':
- description: plugin index unavailable
- /plugins/install:
- post:
- tags:
- - Plugins
- summary: Install a plugin
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- oneOf:
- - type: object
- properties:
- npmName:
- type: string
- example: peertube-plugin-auth-ldap
- required:
- - npmName
- additionalProperties: false
- - type: object
- properties:
- path:
- type: string
- required:
- - path
- additionalProperties: false
- responses:
- '204':
- description: successful operation
- '400':
- description: should have either `npmName` or `path` set
- /plugins/update:
- post:
- tags:
- - Plugins
- summary: Update a plugin
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- oneOf:
- - type: object
- properties:
- npmName:
- type: string
- example: peertube-plugin-auth-ldap
- required:
- - npmName
- additionalProperties: false
- - type: object
- properties:
- path:
- type: string
- required:
- - path
- additionalProperties: false
- responses:
- '204':
- description: successful operation
- '400':
- description: should have either `npmName` or `path` set
- '404':
- description: existing plugin not found
- /plugins/uninstall:
- post:
- tags:
- - Plugins
- summary: Uninstall a plugin
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- npmName:
- type: string
- description: name of the plugin/theme in its package.json
- example: peertube-plugin-auth-ldap
- required:
- - npmName
- responses:
- '204':
- description: successful operation
- '404':
- description: existing plugin not found
- /plugins/{npmName}:
- get:
- tags:
- - Plugins
- summary: Get a plugin
- security:
- - OAuth2:
- - admin
- parameters:
- - $ref: '#/components/parameters/npmName'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Plugin'
- '404':
- description: plugin not found
- /plugins/{npmName}/settings:
- put:
- tags:
- - Plugins
- summary: Set a plugin's settings
- security:
- - OAuth2:
- - admin
- parameters:
- - $ref: '#/components/parameters/npmName'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- settings:
- type: object
- additionalProperties: true
- responses:
- '204':
- description: successful operation
- '404':
- description: plugin not found
- /plugins/{npmName}/public-settings:
- get:
- tags:
- - Plugins
- summary: Get a plugin's public settings
- parameters:
- - $ref: '#/components/parameters/npmName'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- additionalProperties: true
- '404':
- description: plugin not found
- /plugins/{npmName}/registered-settings:
- get:
- tags:
- - Plugins
- summary: Get a plugin's registered settings
- security:
- - OAuth2:
- - admin
- parameters:
- - $ref: '#/components/parameters/npmName'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- additionalProperties: true
- '404':
- description: plugin not found
- servers:
- - url: 'https://peertube2.cpy.re/api/v1'
- description: Live Test Server (live data - latest nightly version)
- - url: 'https://peertube3.cpy.re/api/v1'
- description: Live Test Server (live data - latest RC version)
- - url: 'https://peertube.cpy.re/api/v1'
- description: Live Test Server (live data - stable version)
- components:
- parameters:
- start:
- name: start
- in: query
- required: false
- description: Offset used to paginate results
- schema:
- type: integer
- minimum: 0
- count:
- name: count
- in: query
- required: false
- description: "Number of items to return"
- schema:
- type: integer
- default: 15
- maximum: 100
- minimum: 1
- sort:
- name: sort
- in: query
- required: false
- description: Sort column
- schema:
- type: string
- example: -createdAt
- search:
- name: search
- in: query
- required: false
- description: Plain text search, applied to various parts of the model depending on endpoint
- schema:
- type: string
- searchTarget:
- name: searchTarget
- in: query
- required: false
- description: >
- If the administrator enabled search index support, you can override the default search target.
- **Warning**: If you choose to make an index search, PeerTube will get results from a third party service.
- It means the instance may not yet know the objects you fetched. If you want to load video/channel information:
- * If the current user has the ability to make a remote URI search (this information is available in the config endpoint),
- then reuse the search API to make a search using the object URI so PeerTube instance fetches the remote object and fill its database.
- After that, you can use the classic REST API endpoints to fetch the complete object or interact with it
- * If the current user doesn't have the ability to make a remote URI search, then redirect the user on the origin instance or fetch
- the data from the origin instance API
- schema:
- type: string
- enum:
- - 'local'
- - 'search-index'
- videosSort:
- name: sort
- in: query
- required: false
- description: Sort videos by criteria
- schema:
- type: string
- enum:
- - name
- - -duration
- - -createdAt
- - -publishedAt
- - -views
- - -likes
- - -trending
- videosSearchSort:
- name: sort
- in: query
- required: false
- description: Sort videos by criteria
- schema:
- type: string
- enum:
- - name
- - -duration
- - -createdAt
- - -publishedAt
- - -views
- - -likes
- - -match
- commentsSort:
- name: sort
- in: query
- required: false
- description: Sort comments by criteria
- schema:
- type: string
- enum:
- - -createdAt
- - -totalReplies
- blacklistsSort:
- name: sort
- in: query
- required: false
- description: Sort blacklists by criteria
- schema:
- type: string
- enum:
- - -id
- - name
- - -duration
- - -views
- - -likes
- - -dislikes
- - -uuid
- - -createdAt
- usersSearch:
- name: search
- in: query
- required: false
- description: Plain text search that will match with user usernames or emails
- schema:
- type: string
- usersBlocked:
- name: blocked
- in: query
- required: false
- description: Filter results down to (un)banned users
- schema:
- type: boolean
- usersSort:
- name: sort
- in: query
- required: false
- description: Sort users by criteria
- schema:
- type: string
- enum:
- - -id
- - -username
- - -createdAt
- abusesSort:
- name: sort
- in: query
- required: false
- description: Sort abuses by criteria
- schema:
- type: string
- enum:
- - -id
- - -createdAt
- - -state
- videoRedundanciesSort:
- name: sort
- in: query
- required: false
- description: Sort abuses by criteria
- schema:
- type: string
- enum:
- - name
- name:
- name: name
- in: path
- required: true
- description: The username or handle of the account
- schema:
- type: string
- example: chocobozzz | chocobozzz@example.org
- id:
- name: id
- in: path
- required: true
- description: The user id
- schema:
- type: integer
- minimum: 0
- example: 42
- idOrUUID:
- name: id
- in: path
- required: true
- description: The object id or uuid
- schema:
- oneOf:
- - type: integer
- minimum: 0
- example: 42
- - type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- playlistElementId:
- name: playlistElementId
- in: path
- required: true
- description: Playlist element id
- schema:
- type: integer
- abuseId:
- name: abuseId
- in: path
- required: true
- description: Abuse id
- schema:
- type: integer
- abuseMessageId:
- name: abuseMessageId
- in: path
- required: true
- description: Abuse message id
- schema:
- type: integer
- captionLanguage:
- name: captionLanguage
- in: path
- required: true
- description: The caption language
- schema:
- type: string
- channelHandle:
- name: channelHandle
- in: path
- required: true
- description: The video channel handle
- schema:
- type: string
- example: my_username | my_username@example.com
- subscriptionHandle:
- name: subscriptionHandle
- in: path
- required: true
- description: The subscription handle
- schema:
- type: string
- example: my_username | my_username@example.com
- threadId:
- name: threadId
- in: path
- required: true
- description: The thread id (root comment id)
- schema:
- type: integer
- commentId:
- name: commentId
- in: path
- required: true
- description: The comment id
- schema:
- type: integer
- categoryOneOf:
- name: categoryOneOf
- in: query
- required: false
- description: category id of the video (see [/videos/categories](#tag/Video/paths/~1videos~1categories/get))
- schema:
- oneOf:
- - type: integer
- - type: array
- items:
- type: integer
- style: form
- explode: false
- tagsOneOf:
- name: tagsOneOf
- in: query
- required: false
- description: tag(s) of the video
- schema:
- oneOf:
- - type: string
- - type: array
- items:
- type: string
- style: form
- explode: false
- tagsAllOf:
- name: tagsAllOf
- in: query
- required: false
- description: tag(s) of the video, where all should be present in the video
- schema:
- oneOf:
- - type: string
- - type: array
- items:
- type: string
- style: form
- explode: false
- languageOneOf:
- name: languageOneOf
- in: query
- required: false
- description: language id of the video (see [/videos/languages](#tag/Video/paths/~1videos~1languages/get)). Use `_unknown` to filter on videos that don't have a video language
- schema:
- oneOf:
- - type: string
- - type: array
- items:
- type: string
- style: form
- explode: false
- licenceOneOf:
- name: licenceOneOf
- in: query
- required: false
- description: licence id of the video (see [/videos/licences](#tag/Video/paths/~1videos~1licences/get))
- schema:
- oneOf:
- - type: integer
- - type: array
- items:
- type: integer
- style: form
- explode: false
- skipCount:
- name: skipCount
- in: query
- required: false
- description: if you don't need the `total` in the response
- schema:
- type: string
- enum:
- - 'true'
- - 'false'
- default: 'false'
- nsfw:
- name: nsfw
- in: query
- required: false
- description: whether to include nsfw videos, if any
- schema:
- type: string
- enum:
- - 'true'
- - 'false'
- filter:
- name: filter
- in: query
- required: false
- description: >
- Special filters which might require special rights:
- * `local` - only videos local to the instance
- * `all-local` - only videos local to the instance, but showing private and unlisted videos (requires Admin privileges)
- * `all` - all videos, showing private and unlisted videos (requires Admin privileges)
- schema:
- type: string
- enum:
- - local
- - all-local
- subscriptionsUris:
- name: uris
- in: query
- required: true
- description: list of uris to check if each is part of the user subscriptions
- schema:
- type: array
- items:
- type: string
- format: uri
- npmName:
- name: npmName
- in: path
- required: true
- description: name of the plugin/theme on npmjs.com or in its package.json
- schema:
- type: string
- example: peertube-plugin-auth-ldap
- jobType:
- name: jobType
- in: query
- required: false
- description: job type
- schema:
- type: string
- enum:
- - activitypub-follow
- - activitypub-http-broadcast
- - activitypub-http-fetcher
- - activitypub-http-unicast
- - email
- - video-transcoding
- - video-file-import
- - video-import
- - videos-views
- - activitypub-refresher
- - video-redundancy
- - video-live-ending
- securitySchemes:
- OAuth2:
- description: >
- In the header: *Authorization: Bearer <token\>*
- Authenticating via OAuth requires the following steps:
- - Have an account with sufficient authorization levels
- - [Generate](https://docs.joinpeertube.org/#/api-rest-getting-started) a
- Bearer Token
- - Make Authenticated Requests
- type: oauth2
- flows:
- password:
- tokenUrl: 'https://peertube.example.com/api/v1/users/token'
- scopes:
- admin: Admin scope
- moderator: Moderator scope
- user: User scope
- schemas:
- VideoConstantNumber:
- properties:
- id:
- type: integer
- label:
- type: string
- VideoConstantString:
- properties:
- id:
- type: string
- label:
- type: string
- VideoPlaylistPrivacySet:
- type: integer
- enum:
- - 1
- - 2
- - 3
- description: 'The video playlist privacy (Public = `1`, Unlisted = `2`, Private = `3`)'
- VideoPlaylistPrivacyConstant:
- properties:
- id:
- $ref: '#/components/schemas/VideoPlaylistPrivacySet'
- label:
- type: string
- VideoPlaylistTypeSet:
- type: integer
- enum:
- - 1
- - 2
- description: 'The video playlist type (Regular = `1`, Watch Later = `2`)'
- VideoPlaylistTypeConstant:
- properties:
- id:
- $ref: '#/components/schemas/VideoPlaylistTypeSet'
- label:
- type: string
- VideoPrivacySet:
- type: integer
- enum:
- - 1
- - 2
- - 3
- - 4
- description: 'The video privacy (Public = `1`, Unlisted = `2`, Private = `3`, Internal = `4`)'
- VideoPrivacyConstant:
- properties:
- id:
- $ref: '#/components/schemas/VideoPrivacySet'
- label:
- type: string
- NSFWPolicy:
- type: string
- enum:
- - display
- - blur
- - do_not_list
- UserRole:
- type: integer
- enum:
- - 0
- - 1
- - 2
- description: 'The user role (Admin = `0`, Moderator = `1`, User = `2`)'
- example: 2
- VideoStateConstant:
- properties:
- id:
- type: integer
- enum:
- - 1
- - 2
- - 3
- description: 'The video state (Published = `1`, to transcode = `2`, to import = `3`)'
- label:
- type: string
- AbuseStateSet:
- type: integer
- enum:
- - 1
- - 2
- - 3
- description: 'The abuse state (Pending = `1`, Rejected = `2`, Accepted = `3`)'
- AbuseStateConstant:
- properties:
- id:
- $ref: '#/components/schemas/AbuseStateSet'
- label:
- type: string
- AbusePredefinedReasons:
- type: array
- items:
- type: string
- enum:
- - violentOrAbusive
- - hatefulOrAbusive
- - spamOrMisleading
- - privacy
- - rights
- - serverRules
- - thumbnails
- - captions
- example: [spamOrMisleading]
- VideoResolutionConstant:
- properties:
- id:
- type: integer
- description: 'Video resolution (240, 360, 720, 1080, 1440 or 2160)'
- example: 240
- label:
- type: string
- example: 240p
- VideoScheduledUpdate:
- properties:
- privacy:
- $ref: '#/components/schemas/VideoPrivacySet'
- updateAt:
- type: string
- format: date
- description: When to update the video
- required:
- - updateAt
- AccountSummary:
- properties:
- id:
- type: integer
- name:
- type: string
- displayName:
- type: string
- url:
- type: string
- format: url
- host:
- type: string
- format: hostname
- avatar:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/Avatar'
- VideoChannelSummary:
- properties:
- id:
- type: integer
- name:
- type: string
- displayName:
- type: string
- url:
- type: string
- format: url
- host:
- type: string
- format: hostname
- avatar:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/Avatar'
- PlaylistElement:
- properties:
- position:
- type: integer
- startTimestamp:
- type: integer
- stopTimestamp:
- type: integer
- video:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/Video'
- VideoFile:
- properties:
- magnetUri:
- type: string
- resolution:
- $ref: '#/components/schemas/VideoResolutionConstant'
- size:
- type: integer
- description: 'Video file size in bytes'
- torrentUrl:
- type: string
- format: url
- torrentDownloadUrl:
- type: string
- format: url
- fileUrl:
- type: string
- format: url
- fileDownloadUrl:
- type: string
- format: url
- fps:
- type: number
- metadataUrl:
- type: string
- format: url
- VideoStreamingPlaylists:
- properties:
- id:
- type: integer
- type:
- type: integer
- enum:
- - 1
- description: 'Playlist type (HLS = `1`)'
- playlistUrl:
- type: string
- format: url
- segmentsSha256Url:
- type: string
- format: url
- files:
- type: array
- description: 'Video files associated to this playlist. The difference with the root "files" property is that these files are fragmented, so they can be used in this streaming playlist (HLS etc)'
- items:
- $ref: '#/components/schemas/VideoFile'
- redundancies:
- type: array
- items:
- type: object
- properties:
- baseUrl:
- type: string
- format: url
- VideoInfo:
- properties:
- id:
- type: integer
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- name:
- type: string
- Video:
- properties:
- id:
- type: integer
- example: 8
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- isLive:
- type: boolean
- createdAt:
- type: string
- format: date-time
- publishedAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- originallyPublishedAt:
- type: string
- format: date-time
- category:
- $ref: '#/components/schemas/VideoConstantNumber'
- licence:
- $ref: '#/components/schemas/VideoConstantNumber'
- language:
- $ref: '#/components/schemas/VideoConstantString'
- privacy:
- $ref: '#/components/schemas/VideoPrivacyConstant'
- description:
- type: string
- duration:
- type: integer
- example: 1419
- isLocal:
- type: boolean
- name:
- type: string
- example: What is PeerTube?
- thumbnailPath:
- type: string
- example: /static/thumbnails/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
- previewPath:
- type: string
- example: /lazy-static/previews/a65bc12f-9383-462e-81ae-8207e8b434ee.jpg
- embedPath:
- type: string
- example: /videos/embed/a65bc12f-9383-462e-81ae-8207e8b434ee
- views:
- type: integer
- example: 1337
- likes:
- type: integer
- example: 42
- dislikes:
- type: integer
- example: 7
- nsfw:
- type: boolean
- waitTranscoding:
- type: boolean
- nullable: true
- state:
- $ref: '#/components/schemas/VideoStateConstant'
- scheduledUpdate:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/VideoScheduledUpdate'
- blacklisted:
- nullable: true
- type: boolean
- blacklistedReason:
- nullable: true
- type: string
- account:
- $ref: '#/components/schemas/AccountSummary'
- channel:
- $ref: '#/components/schemas/VideoChannelSummary'
- userHistory:
- nullable: true
- type: object
- properties:
- currentTime:
- type: integer
- VideoDetails:
- allOf:
- - $ref: '#/components/schemas/Video'
- - type: object
- properties:
- descriptionPath:
- type: string
- support:
- type: string
- description: A text tell the audience how to support the video creator
- example: Please support my work on <insert crowdfunding plateform>! <3
- channel:
- $ref: '#/components/schemas/VideoChannel'
- account:
- $ref: '#/components/schemas/Account'
- tags:
- type: array
- items:
- type: string
- example: [flowers, gardening]
- files:
- type: array
- description: 'WebTorrent/raw video files. Can be empty if WebTorrent is disabled on the server. In this case, video files will be in the "streamingPlaylists[].files" property'
- items:
- $ref: '#/components/schemas/VideoFile'
- commentsEnabled:
- type: boolean
- downloadEnabled:
- type: boolean
- trackerUrls:
- type: array
- items:
- type: string
- format: url
- streamingPlaylists:
- type: array
- items:
- $ref: '#/components/schemas/VideoStreamingPlaylists'
- FileRedundancyInformation:
- properties:
- id:
- type: integer
- fileUrl:
- type: string
- format: url
- strategy:
- type: string
- enum:
- - manual
- - most-views
- - trending
- - recently-added
- size:
- type: integer
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- expiresOn:
- type: string
- format: date-time
- VideoRedundancy:
- properties:
- id:
- type: integer
- name:
- type: string
- url:
- type: string
- format: url
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- redundancies:
- type: object
- properties:
- files:
- type: array
- items:
- $ref: '#/components/schemas/FileRedundancyInformation'
- streamingPlaylists:
- type: array
- items:
- $ref: '#/components/schemas/FileRedundancyInformation'
- VideoImportStateConstant:
- properties:
- id:
- type: integer
- enum:
- - 1
- - 2
- - 3
- description: 'The video import state (Pending = `1`, Success = `2`, Failed = `3`)'
- label:
- type: string
- example: Pending
- VideoImport:
- properties:
- id:
- type: integer
- example: 2
- targetUrl:
- type: string
- format: url
- example: https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d
- magnetUri:
- type: string
- format: uri
- 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
- torrentName:
- type: string
- state:
- $ref: '#/components/schemas/VideoImportStateConstant'
- error:
- type: string
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- video:
- $ref: '#/components/schemas/Video'
- Abuse:
- properties:
- id:
- type: integer
- example: 7
- reason:
- type: string
- example: The video is a spam
- predefinedReasons:
- $ref: '#/components/schemas/AbusePredefinedReasons'
- reporterAccount:
- $ref: '#/components/schemas/Account'
- state:
- $ref: '#/components/schemas/AbuseStateConstant'
- moderationComment:
- type: string
- example: Decided to ban the server since it spams us regularly
- video:
- type: object
- properties:
- id:
- type: integer
- name:
- type: string
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- createdAt:
- type: string
- format: date-time
- AbuseMessage:
- properties:
- id:
- type: integer
- message:
- type: string
- byModerator:
- type: boolean
- createdAt:
- type: string
- format: date-time
- account:
- $ref: '#/components/schemas/AccountSummary'
- VideoBlacklist:
- properties:
- id:
- type: integer
- videoId:
- type: integer
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- name:
- type: string
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- description:
- type: string
- duration:
- type: integer
- views:
- type: integer
- likes:
- type: integer
- dislikes:
- type: integer
- nsfw:
- type: boolean
- VideoChannel:
- properties:
- displayName:
- type: string
- description:
- type: string
- isLocal:
- type: boolean
- ownerAccount:
- type: object
- properties:
- id:
- type: integer
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- VideoPlaylist:
- properties:
- id:
- type: integer
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- description:
- type: string
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- displayName:
- type: string
- isLocal:
- type: boolean
- videoLength:
- type: integer
- thumbnailPath:
- type: string
- privacy:
- $ref: '#/components/schemas/VideoPlaylistPrivacyConstant'
- type:
- $ref: '#/components/schemas/VideoPlaylistTypeConstant'
- ownerAccount:
- $ref: '#/components/schemas/AccountSummary'
- videoChannel:
- $ref: '#/components/schemas/VideoChannelSummary'
- VideoComment:
- properties:
- id:
- type: integer
- url:
- type: string
- format: url
- text:
- type: string
- threadId:
- type: integer
- inReplyToCommentId:
- type: integer
- videoId:
- type: integer
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- totalRepliesFromVideoAuthor:
- type: integer
- totalReplies:
- type: integer
- account:
- $ref: '#/components/schemas/Account'
- VideoCommentThreadTree:
- properties:
- comment:
- $ref: '#/components/schemas/VideoComment'
- children:
- type: array
- items:
- $ref: '#/components/schemas/VideoCommentThreadTree'
- VideoCaption:
- properties:
- language:
- $ref: '#/components/schemas/VideoConstantString'
- captionPath:
- type: string
- Avatar:
- properties:
- path:
- type: string
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- ActorInfo:
- properties:
- id:
- type: integer
- example: 11
- name:
- type: string
- displayName:
- type: string
- host:
- type: string
- format: hostname
- avatar:
- nullable: true
- type: object
- properties:
- path:
- type: string
- Actor:
- properties:
- id:
- type: integer
- example: 11
- url:
- type: string
- format: url
- name:
- type: string
- host:
- type: string
- format: hostname
- followingCount:
- type: integer
- followersCount:
- type: integer
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- avatar:
- $ref: '#/components/schemas/Avatar'
- Account:
- allOf:
- - $ref: '#/components/schemas/Actor'
- - properties:
- userId:
- type: string
- example: 2
- displayName:
- type: string
- description:
- type: string
- UserWatchingVideo:
- properties:
- currentTime:
- type: integer
- description: timestamp within the video, in seconds
- example: 5
- ServerConfig:
- properties:
- instance:
- type: object
- properties:
- name:
- type: string
- shortDescription:
- type: string
- defaultClientRoute:
- type: string
- isNSFW:
- type: boolean
- defaultNSFWPolicy:
- type: string
- customizations:
- type: object
- properties:
- javascript:
- type: string
- css:
- type: string
- search:
- type: object
- properties:
- remoteUri:
- type: object
- properties:
- users:
- type: boolean
- anonymous:
- type: boolean
- plugin:
- type: object
- properties:
- registered:
- type: array
- items:
- type: string
- theme:
- type: object
- properties:
- registered:
- type: array
- items:
- type: string
- email:
- type: object
- properties:
- enabled:
- type: boolean
- contactForm:
- type: object
- properties:
- enabled:
- type: boolean
- serverVersion:
- type: string
- serverCommit:
- type: string
- signup:
- type: object
- properties:
- allowed:
- type: boolean
- allowedForCurrentIP:
- type: boolean
- requiresEmailVerification:
- type: boolean
- transcoding:
- type: object
- properties:
- hls:
- type: object
- properties:
- enabled:
- type: boolean
- webtorrent:
- type: object
- properties:
- enabled:
- type: boolean
- enabledResolutions:
- type: array
- items:
- type: integer
- import:
- type: object
- properties:
- videos:
- type: object
- properties:
- http:
- type: object
- properties:
- enabled:
- type: boolean
- torrent:
- type: object
- properties:
- enabled:
- type: boolean
- autoBlacklist:
- type: object
- properties:
- videos:
- type: object
- properties:
- ofUsers:
- type: object
- properties:
- enabled:
- type: boolean
- avatar:
- type: object
- properties:
- file:
- type: object
- properties:
- size:
- type: object
- properties:
- max:
- type: integer
- extensions:
- type: array
- items:
- type: string
- video:
- type: object
- properties:
- image:
- type: object
- properties:
- extensions:
- type: array
- items:
- type: string
- size:
- type: object
- properties:
- max:
- type: integer
- file:
- type: object
- properties:
- extensions:
- type: array
- items:
- type: string
- videoCaption:
- type: object
- properties:
- file:
- type: object
- properties:
- size:
- type: object
- properties:
- max:
- type: integer
- extensions:
- type: array
- items:
- type: string
- user:
- type: object
- properties:
- videoQuota:
- type: integer
- videoQuotaDaily:
- type: integer
- trending:
- type: object
- properties:
- videos:
- type: object
- properties:
- intervalDays:
- type: integer
- tracker:
- type: object
- properties:
- enabled:
- type: boolean
- followings:
- type: object
- properties:
- instance:
- type: object
- properties:
- autoFollowIndex:
- type: object
- properties:
- indexUrl:
- type: string
- format: url
- ServerConfigAbout:
- properties:
- instance:
- type: object
- properties:
- name:
- type: string
- shortDescription:
- type: string
- description:
- type: string
- terms:
- type: string
- ServerConfigCustom:
- properties:
- instance:
- type: object
- properties:
- name:
- type: string
- shortDescription:
- type: string
- description:
- type: string
- terms:
- type: string
- defaultClientRoute:
- type: string
- isNSFW:
- type: boolean
- defaultNSFWPolicy:
- type: string
- customizations:
- type: object
- properties:
- javascript:
- type: string
- css:
- type: string
- theme:
- type: object
- properties:
- default:
- type: string
- services:
- type: object
- properties:
- twitter:
- type: object
- properties:
- username:
- type: string
- whitelisted:
- type: boolean
- cache:
- type: object
- properties:
- previews:
- type: object
- properties:
- size:
- type: integer
- captions:
- type: object
- properties:
- size:
- type: integer
- signup:
- type: object
- properties:
- enabled:
- type: boolean
- limit:
- type: integer
- requiresEmailVerification:
- type: boolean
- admin:
- type: object
- properties:
- email:
- type: string
- format: email
- contactForm:
- type: object
- properties:
- enabled:
- type: boolean
- user:
- type: object
- properties:
- videoQuota:
- type: integer
- videoQuotaDaily:
- type: integer
- transcoding:
- type: object
- properties:
- enabled:
- type: boolean
- allowAdditionalExtensions:
- type: boolean
- allowAudioFiles:
- type: boolean
- threads:
- type: integer
- resolutions:
- type: object
- properties:
- 240p:
- type: boolean
- 360p:
- type: boolean
- 480p:
- type: boolean
- 720p:
- type: boolean
- 1080p:
- type: boolean
- 1440p:
- type: boolean
- 2160p:
- type: boolean
- hls:
- type: object
- properties:
- enabled:
- type: boolean
- import:
- type: object
- properties:
- videos:
- type: object
- properties:
- http:
- type: object
- properties:
- enabled:
- type: boolean
- torrent:
- type: object
- properties:
- enabled:
- type: boolean
- autoBlacklist:
- type: object
- properties:
- videos:
- type: object
- properties:
- ofUsers:
- type: object
- properties:
- enabled:
- type: boolean
- followers:
- type: object
- properties:
- instance:
- type: object
- properties:
- enabled:
- type: boolean
- manualApproval:
- type: boolean
- Follow:
- properties:
- id:
- type: integer
- follower:
- $ref: '#/components/schemas/Actor'
- following:
- $ref: '#/components/schemas/Actor'
- score:
- type: number
- description: score reflecting the reachability of the actor, with steps of `10` and a base score of `1000`.
- state:
- type: string
- enum:
- - pending
- - accepted
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- PredefinedAbuseReasons:
- description: Reason categories that help triage reports
- type: array
- items:
- type: string
- enum:
- - violentOrAbusive
- - hatefulOrAbusive
- - spamOrMisleading
- - privacy
- - rights
- - serverRules
- - thumbnails
- - captions
- Job:
- properties:
- id:
- type: integer
- minimum: 0
- example: 42
- state:
- type: string
- enum:
- - active
- - completed
- - failed
- - waiting
- - delayed
- type:
- type: string
- enum:
- - activitypub-http-unicast
- - activitypub-http-broadcast
- - activitypub-http-fetcher
- - activitypub-follow
- - video-file-import
- - video-transcoding
- - email
- - video-import
- - videos-views
- - activitypub-refresher
- - video-redundancy
- data:
- type: object
- additionalProperties: true
- error:
- type: object
- additionalProperties: true
- createdAt:
- type: string
- format: date-time
- finishedOn:
- type: string
- format: date-time
- processedOn:
- type: string
- format: date-time
- AddUserResponse:
- properties:
- user:
- type: object
- properties:
- id:
- type: integer
- example: 8
- account:
- type: object
- properties:
- id:
- type: integer
- example: 37
- VideoUploadResponse:
- properties:
- video:
- type: object
- properties:
- id:
- type: integer
- example: 8
- uuid:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- CommentThreadResponse:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/VideoComment'
- CommentThreadPostResponse:
- properties:
- comment:
- $ref: '#/components/schemas/VideoComment'
- VideoListResponse:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/Video'
- User:
- properties:
- id:
- type: integer
- readOnly: true
- username:
- type: string
- description: The user username
- minLength: 1
- maxLength: 50
- email:
- type: string
- format: email
- description: The user email
- theme:
- type: string
- description: Theme enabled by this user
- emailVerified:
- type: boolean
- description: Has the user confirmed their email address?
- nsfwPolicy:
- $ref: '#/components/schemas/NSFWPolicy'
- webtorrentEnabled:
- type: boolean
- description: Enable P2P in the player
- autoPlayVideo:
- type: boolean
- description: Automatically start playing the video on the watch page
- role:
- $ref: '#/components/schemas/UserRole'
- roleLabel:
- type: string
- enum:
- - User
- - Moderator
- - Administrator
- videoQuota:
- type: integer
- description: The user video quota
- videoQuotaDaily:
- type: integer
- description: The user daily video quota
- videosCount:
- type: integer
- abusesCount:
- type: integer
- abusesAcceptedCount:
- type: integer
- abusesCreatedCount:
- type: integer
- videoCommentsCount:
- type: integer
- noInstanceConfigWarningModal:
- type: boolean
- noWelcomeModal:
- type: boolean
- blocked:
- type: boolean
- blockedReason:
- type: string
- createdAt:
- type: string
- account:
- $ref: '#/components/schemas/Account'
- videoChannels:
- type: array
- items:
- $ref: '#/components/schemas/VideoChannel'
- AddUser:
- properties:
- username:
- type: string
- description: The user username
- minLength: 1
- maxLength: 50
- password:
- type: string
- format: password
- description: The user password. If the smtp server is configured, you can leave empty and an email will be sent
- minLength: 6
- maxLength: 255
- email:
- type: string
- format: email
- description: The user email
- videoQuota:
- type: integer
- description: The user video quota
- videoQuotaDaily:
- type: integer
- description: The user daily video quota
- role:
- $ref: '#/components/schemas/UserRole'
- required:
- - username
- - password
- - email
- - videoQuota
- - videoQuotaDaily
- - role
- UpdateUser:
- properties:
- id:
- type: string
- description: The user id
- email:
- type: string
- format: email
- description: The updated email of the user
- videoQuota:
- type: integer
- description: The updated video quota of the user
- videoQuotaDaily:
- type: integer
- description: The updated daily video quota of the user
- role:
- $ref: '#/components/schemas/UserRole'
- required:
- - id
- - email
- - videoQuota
- - videoQuotaDaily
- - role
- UpdateMe:
- properties:
- password:
- type: string
- format: password
- description: Your new password
- minLength: 6
- maxLength: 255
- email:
- type: string
- format: email
- description: Your new email
- displayNSFW:
- type: string
- description: Your new displayNSFW
- enum:
- - 'true'
- - 'false'
- - both
- autoPlayVideo:
- type: boolean
- description: Your new autoPlayVideo
- required:
- - password
- - email
- - displayNSFW
- - autoPlayVideo
- GetMeVideoRating:
- properties:
- id:
- type: string
- description: Id of the video
- rating:
- type: number
- description: Rating of the video
- required:
- - id
- - rating
- VideoRating:
- properties:
- video:
- $ref: '#/components/schemas/Video'
- rating:
- type: number
- description: 'Rating of the video'
- required:
- - video
- - rating
- RegisterUser:
- properties:
- username:
- type: string
- description: The username of the user
- minLength: 1
- maxLength: 50
- pattern: '/^[a-z0-9._]{1,50}$/'
- password:
- type: string
- format: password
- description: The password of the user
- minLength: 6
- maxLength: 255
- email:
- type: string
- format: email
- description: The email of the user
- displayName:
- type: string
- description: The user display name
- minLength: 1
- maxLength: 120
- channel:
- type: object
- properties:
- name:
- type: string
- description: The username for the default channel
- pattern: '/^[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\\-_.:]+$/'
- displayName:
- type: string
- description: The display name for the default channel
- minLength: 1
- maxLength: 120
- required:
- - username
- - password
- - email
- VideoChannelCreate:
- properties:
- name:
- type: string
- displayName:
- type: string
- description:
- type: string
- support:
- type: string
- description: 'A text shown by default on all videos of this channel, to tell the audience how to support it'
- example: Please support my work on <insert crowdfunding plateform>! <3
- required:
- - name
- - displayName
- VideoChannelUpdate:
- properties:
- displayName:
- type: string
- description:
- type: string
- support:
- type: string
- description: 'A text shown by default on all videos of this channel, to tell the audience how to support it'
- example: Please support my work on <insert crowdfunding plateform>! <3
- bulkVideosSupportUpdate:
- type: boolean
- description: 'Update the support field for all videos of this channel'
- MRSSPeerLink:
- type: object
- xml:
- name: 'media:peerLink'
- properties:
- href:
- type: string
- xml:
- attribute: true
- type:
- type: string
- enum:
- - application/x-bittorrent
- xml:
- attribute: true
- MRSSGroupContent:
- type: object
- xml:
- name: 'media:content'
- properties:
- url:
- type: string
- format: url
- xml:
- attribute: true
- fileSize:
- type: integer
- xml:
- attribute: true
- type:
- type: string
- xml:
- attribute: true
- framerate:
- type: integer
- xml:
- attribute: true
- duration:
- type: integer
- xml:
- attribute: true
- height:
- type: integer
- xml:
- attribute: true
- lang:
- type: string
- xml:
- attribute: true
- VideoCommentsForXML:
- type: array
- xml:
- wrapped: true
- name: 'channel'
- items:
- type: object
- xml:
- name: 'item'
- properties:
- link:
- type: string
- format: url
- guid:
- type: string
- pubDate:
- type: string
- format: date-time
- 'content:encoded':
- type: string
- 'dc:creator':
- type: string
- VideosForXML:
- type: array
- xml:
- wrapped: true
- name: 'channel'
- items:
- type: object
- xml:
- name: 'item'
- properties:
- link:
- type: string
- format: url
- description: video watch page URL
- guid:
- type: string
- description: video canonical URL
- pubDate:
- type: string
- format: date-time
- description: video publication date
- description:
- type: string
- description: video description
- 'content:encoded':
- type: string
- description: video description
- 'dc:creator':
- type: string
- description: publisher user name
- 'media:category':
- type: integer
- description: video category (MRSS)
- 'media:community':
- type: object
- description: see [media:community](https://www.rssboard.org/media-rss#media-community) (MRSS)
- properties:
- 'media:statistics':
- type: object
- properties:
- views:
- type: integer
- xml:
- attribute: true
- 'media:embed':
- type: object
- properties:
- url:
- type: string
- format: url
- description: video embed path, relative to the canonical URL domain (MRSS)
- xml:
- attribute: true
- 'media:player':
- type: object
- properties:
- url:
- type: string
- format: url
- description: video watch path, relative to the canonical URL domain (MRSS)
- xml:
- attribute: true
- 'media:thumbnail':
- type: object
- properties:
- url:
- type: string
- format: url
- xml:
- attribute: true
- height:
- type: integer
- xml:
- attribute: true
- width:
- type: integer
- xml:
- attribute: true
- 'media:title':
- type: string
- description: see [media:title](https://www.rssboard.org/media-rss#media-title) (MRSS). We only use `plain` titles.
- 'media:description':
- type: string
- 'media:rating':
- type: string
- enum:
- - nonadult
- - adult
- description: see [media:rating](https://www.rssboard.org/media-rss#media-rating) (MRSS)
- 'enclosure':
- type: object
- description: main streamable file for the video
- properties:
- url:
- type: string
- format: url
- xml:
- attribute: true
- type:
- type: string
- enum:
- - application/x-bittorrent
- xml:
- attribute: true
- length:
- type: integer
- xml:
- attribute: true
- 'media:group':
- type: array
- description: list of streamable files for the video. see [media:peerLink](https://www.rssboard.org/media-rss#media-peerlink) and [media:content](https://www.rssboard.org/media-rss#media-content) or (MRSS)
- items:
- anyOf:
- - $ref: '#/components/schemas/MRSSPeerLink'
- - $ref: '#/components/schemas/MRSSGroupContent'
- NotificationSettingValue:
- type: integer
- description: >
- Notification type
- - `0` NONE
- - `1` WEB
- - `2` EMAIL
- enum:
- - 0
- - 1
- - 3
- Notification:
- properties:
- id:
- type: integer
- type:
- type: integer
- description: >
- Notification type, following the `UserNotificationType` enum:
- - `1` NEW_VIDEO_FROM_SUBSCRIPTION
- - `2` NEW_COMMENT_ON_MY_VIDEO
- - `3` NEW_ABUSE_FOR_MODERATORS
- - `4` BLACKLIST_ON_MY_VIDEO
- - `5` UNBLACKLIST_ON_MY_VIDEO
- - `6` MY_VIDEO_PUBLISHED
- - `7` MY_VIDEO_IMPORT_SUCCESS
- - `8` MY_VIDEO_IMPORT_ERROR
- - `9` NEW_USER_REGISTRATION
- - `10` NEW_FOLLOW
- - `11` COMMENT_MENTION
- - `12` VIDEO_AUTO_BLACKLIST_FOR_MODERATORS
- - `13` NEW_INSTANCE_FOLLOWER
- - `14` AUTO_INSTANCE_FOLLOWING
- read:
- type: boolean
- video:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/VideoInfo'
- - type: object
- properties:
- channel:
- $ref: '#/components/schemas/ActorInfo'
- videoImport:
- nullable: true
- type: object
- properties:
- id:
- type: integer
- video:
- nullable: true
- $ref: '#/components/schemas/VideoInfo'
- torrentName:
- type: string
- nullable: true
- magnetUri:
- type: string
- format: uri
- nullable: true
- targetUri:
- type: string
- format: uri
- nullable: true
- comment:
- nullable: true
- type: object
- properties:
- id:
- type: integer
- threadId:
- type: integer
- video:
- $ref: '#/components/schemas/VideoInfo'
- account:
- $ref: '#/components/schemas/ActorInfo'
- videoAbuse:
- nullable: true
- type: object
- properties:
- id:
- type: integer
- video:
- allOf:
- - $ref: '#/components/schemas/VideoInfo'
- videoBlacklist:
- nullable: true
- type: object
- properties:
- id:
- type: integer
- video:
- allOf:
- - $ref: '#/components/schemas/VideoInfo'
- account:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/ActorInfo'
- actorFollow:
- type: object
- nullable: true
- properties:
- id:
- type: integer
- follower:
- $ref: '#/components/schemas/ActorInfo'
- state:
- type: string
- enum:
- - pending
- - accepted
- following:
- type: object
- properties:
- type:
- type: string
- enum:
- - account
- - channel
- - instance
- name:
- type: string
- displayName:
- type: string
- host:
- type: string
- format: hostname
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- NotificationListResponse:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/Notification'
- Plugin:
- properties:
- name:
- type: string
- example: peertube-plugin-auth-ldap
- type:
- type: integer
- description: >
- - `1`: PLUGIN
- - `2`: THEME
- enum:
- - 1
- - 2
- latestVersion:
- type: string
- example: 0.0.3
- version:
- type: string
- example: 0.0.1
- enabled:
- type: boolean
- uninstalled:
- type: boolean
- peertubeEngine:
- type: string
- example: 2.2.0
- description:
- type: string
- homepage:
- type: string
- format: url
- example: https://framagit.org/framasoft/peertube/official-plugins/tree/master/peertube-plugin-auth-ldap
- settings:
- type: object
- additionalProperties: true
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- PluginResponse:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/Plugin'
- LiveVideoUpdate:
- properties:
- saveReplay:
- type: boolean
- permanentLive:
- description: User can stream multiple times in a permanent live
- type: boolean
- LiveVideoResponse:
- properties:
- rtmpUrl:
- type: string
- streamKey:
- type: string
- description: RTMP stream key to use to stream into this live video
- saveReplay:
- type: boolean
- permanentLive:
- description: User can stream multiple times in a permanent live
- type: boolean
- callbacks:
- searchIndex:
- 'https://search.example.org/api/v1/search/videos':
- post:
- summary: third-party search index MAY be used instead of the local index, if enabled by the instance admin. see `searchTarget`
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
|