123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263426442654266426742684269427042714272427342744275427642774278427942804281428242834284428542864287428842894290429142924293429442954296429742984299430043014302430343044305430643074308430943104311431243134314431543164317431843194320432143224323432443254326432743284329433043314332433343344335433643374338433943404341434243434344434543464347434843494350435143524353435443554356435743584359436043614362436343644365436643674368436943704371437243734374437543764377437843794380438143824383438443854386438743884389439043914392439343944395439643974398439944004401440244034404440544064407440844094410441144124413441444154416441744184419442044214422442344244425442644274428442944304431443244334434443544364437443844394440444144424443444444454446444744484449445044514452445344544455445644574458445944604461446244634464446544664467446844694470447144724473447444754476447744784479448044814482448344844485448644874488448944904491449244934494449544964497449844994500450145024503450445054506450745084509451045114512451345144515451645174518451945204521452245234524452545264527452845294530453145324533453445354536453745384539454045414542454345444545454645474548454945504551455245534554455545564557455845594560456145624563456445654566456745684569457045714572457345744575457645774578457945804581458245834584458545864587458845894590459145924593459445954596459745984599460046014602460346044605460646074608460946104611461246134614461546164617461846194620462146224623462446254626462746284629463046314632463346344635463646374638463946404641464246434644464546464647464846494650465146524653465446554656465746584659466046614662466346644665466646674668466946704671467246734674467546764677467846794680468146824683468446854686468746884689469046914692469346944695469646974698469947004701470247034704470547064707470847094710471147124713471447154716471747184719472047214722472347244725472647274728472947304731473247334734473547364737473847394740474147424743474447454746474747484749475047514752475347544755475647574758475947604761476247634764476547664767476847694770477147724773477447754776477747784779478047814782478347844785478647874788478947904791479247934794479547964797479847994800480148024803480448054806480748084809481048114812481348144815481648174818481948204821482248234824482548264827482848294830483148324833483448354836483748384839484048414842484348444845484648474848484948504851485248534854485548564857485848594860486148624863486448654866486748684869487048714872487348744875487648774878487948804881488248834884488548864887488848894890489148924893489448954896489748984899490049014902490349044905490649074908490949104911491249134914491549164917491849194920492149224923492449254926492749284929493049314932493349344935493649374938493949404941494249434944494549464947494849494950495149524953495449554956495749584959496049614962496349644965496649674968496949704971497249734974497549764977497849794980498149824983498449854986498749884989499049914992499349944995499649974998499950005001500250035004500550065007500850095010501150125013501450155016501750185019502050215022502350245025502650275028502950305031503250335034503550365037503850395040504150425043504450455046504750485049505050515052505350545055505650575058505950605061506250635064506550665067506850695070507150725073507450755076507750785079508050815082508350845085508650875088508950905091509250935094509550965097509850995100510151025103510451055106510751085109511051115112511351145115511651175118511951205121512251235124512551265127512851295130513151325133513451355136513751385139514051415142514351445145514651475148514951505151515251535154515551565157515851595160516151625163516451655166516751685169517051715172517351745175517651775178517951805181518251835184518551865187518851895190519151925193519451955196519751985199520052015202520352045205520652075208520952105211521252135214521552165217521852195220522152225223522452255226522752285229523052315232523352345235523652375238523952405241524252435244524552465247524852495250525152525253525452555256525752585259526052615262526352645265526652675268526952705271527252735274527552765277527852795280528152825283528452855286528752885289529052915292529352945295529652975298529953005301530253035304530553065307530853095310531153125313531453155316531753185319532053215322532353245325532653275328532953305331533253335334533553365337533853395340534153425343534453455346534753485349535053515352535353545355535653575358535953605361536253635364536553665367536853695370537153725373537453755376537753785379538053815382538353845385538653875388538953905391539253935394539553965397539853995400540154025403540454055406540754085409541054115412541354145415541654175418541954205421542254235424542554265427542854295430543154325433543454355436543754385439544054415442544354445445544654475448544954505451545254535454545554565457545854595460546154625463546454655466546754685469547054715472547354745475547654775478547954805481548254835484548554865487548854895490549154925493549454955496549754985499550055015502550355045505550655075508550955105511551255135514551555165517551855195520552155225523552455255526552755285529553055315532553355345535553655375538553955405541554255435544554555465547554855495550555155525553555455555556555755585559556055615562556355645565556655675568556955705571557255735574557555765577557855795580558155825583558455855586558755885589559055915592559355945595559655975598559956005601560256035604560556065607560856095610561156125613561456155616561756185619562056215622562356245625562656275628562956305631563256335634563556365637563856395640564156425643564456455646564756485649565056515652565356545655565656575658565956605661566256635664566556665667566856695670567156725673567456755676567756785679568056815682568356845685568656875688568956905691569256935694569556965697569856995700570157025703570457055706570757085709571057115712571357145715571657175718571957205721572257235724572557265727572857295730573157325733573457355736573757385739574057415742574357445745574657475748574957505751575257535754575557565757575857595760576157625763576457655766576757685769577057715772577357745775577657775778577957805781578257835784578557865787578857895790579157925793579457955796579757985799580058015802580358045805580658075808580958105811581258135814581558165817581858195820582158225823582458255826582758285829583058315832583358345835583658375838583958405841584258435844584558465847584858495850585158525853585458555856585758585859586058615862586358645865586658675868586958705871587258735874587558765877587858795880588158825883588458855886588758885889589058915892589358945895589658975898589959005901590259035904590559065907590859095910591159125913591459155916591759185919592059215922592359245925592659275928592959305931593259335934593559365937593859395940594159425943594459455946594759485949595059515952595359545955595659575958595959605961596259635964596559665967596859695970597159725973597459755976597759785979598059815982598359845985598659875988598959905991599259935994599559965997599859996000600160026003600460056006600760086009601060116012601360146015601660176018601960206021602260236024602560266027602860296030603160326033603460356036603760386039604060416042604360446045604660476048604960506051605260536054605560566057605860596060606160626063606460656066606760686069607060716072607360746075607660776078607960806081608260836084608560866087608860896090609160926093609460956096609760986099610061016102610361046105610661076108610961106111611261136114611561166117611861196120612161226123612461256126612761286129613061316132613361346135613661376138613961406141614261436144614561466147614861496150615161526153615461556156615761586159616061616162616361646165616661676168616961706171617261736174617561766177617861796180618161826183618461856186618761886189619061916192619361946195619661976198619962006201620262036204620562066207620862096210621162126213621462156216621762186219622062216222622362246225622662276228622962306231623262336234623562366237623862396240624162426243624462456246624762486249625062516252625362546255625662576258625962606261626262636264626562666267626862696270627162726273627462756276627762786279628062816282628362846285628662876288628962906291629262936294629562966297629862996300630163026303630463056306630763086309631063116312631363146315631663176318631963206321632263236324632563266327632863296330633163326333633463356336633763386339634063416342634363446345634663476348634963506351635263536354635563566357635863596360636163626363636463656366636763686369637063716372637363746375637663776378637963806381638263836384638563866387638863896390639163926393639463956396639763986399640064016402640364046405640664076408640964106411641264136414641564166417641864196420642164226423642464256426642764286429643064316432643364346435643664376438643964406441644264436444644564466447644864496450645164526453645464556456645764586459646064616462646364646465646664676468646964706471647264736474647564766477647864796480648164826483648464856486648764886489649064916492649364946495649664976498649965006501650265036504650565066507650865096510651165126513651465156516651765186519652065216522652365246525652665276528652965306531653265336534653565366537653865396540654165426543654465456546654765486549655065516552655365546555655665576558655965606561656265636564656565666567656865696570657165726573657465756576657765786579658065816582658365846585658665876588658965906591659265936594659565966597659865996600660166026603660466056606660766086609661066116612661366146615661666176618661966206621662266236624662566266627662866296630663166326633663466356636663766386639664066416642664366446645664666476648664966506651665266536654665566566657665866596660666166626663666466656666666766686669667066716672667366746675667666776678667966806681668266836684668566866687668866896690669166926693669466956696669766986699670067016702670367046705670667076708670967106711671267136714671567166717671867196720672167226723672467256726672767286729673067316732673367346735673667376738673967406741674267436744674567466747674867496750675167526753675467556756675767586759676067616762676367646765676667676768676967706771677267736774677567766777677867796780678167826783678467856786678767886789679067916792679367946795679667976798679968006801680268036804680568066807680868096810681168126813681468156816681768186819682068216822682368246825682668276828682968306831683268336834683568366837683868396840684168426843684468456846684768486849685068516852685368546855685668576858685968606861686268636864686568666867686868696870687168726873687468756876687768786879688068816882688368846885688668876888688968906891689268936894689568966897689868996900690169026903690469056906690769086909691069116912691369146915691669176918691969206921692269236924692569266927692869296930693169326933693469356936693769386939694069416942694369446945694669476948694969506951695269536954695569566957695869596960696169626963696469656966696769686969697069716972697369746975697669776978697969806981698269836984698569866987698869896990699169926993699469956996699769986999700070017002700370047005700670077008700970107011701270137014701570167017701870197020702170227023702470257026702770287029703070317032703370347035703670377038703970407041704270437044704570467047704870497050705170527053705470557056705770587059706070617062706370647065706670677068706970707071707270737074707570767077707870797080708170827083708470857086708770887089709070917092709370947095709670977098709971007101710271037104710571067107710871097110711171127113711471157116711771187119712071217122712371247125712671277128712971307131713271337134713571367137713871397140714171427143714471457146714771487149715071517152715371547155715671577158715971607161716271637164716571667167716871697170717171727173717471757176717771787179718071817182718371847185718671877188718971907191719271937194719571967197719871997200720172027203720472057206720772087209721072117212721372147215721672177218721972207221722272237224722572267227722872297230723172327233723472357236723772387239724072417242724372447245724672477248724972507251725272537254725572567257725872597260726172627263726472657266726772687269727072717272727372747275727672777278727972807281728272837284728572867287728872897290729172927293729472957296729772987299730073017302730373047305730673077308730973107311731273137314731573167317731873197320732173227323732473257326732773287329733073317332733373347335733673377338733973407341734273437344734573467347734873497350735173527353735473557356735773587359736073617362736373647365736673677368736973707371737273737374737573767377737873797380738173827383738473857386738773887389739073917392739373947395739673977398739974007401740274037404740574067407740874097410741174127413741474157416741774187419742074217422742374247425742674277428742974307431743274337434743574367437743874397440744174427443744474457446744774487449745074517452745374547455745674577458745974607461746274637464746574667467746874697470747174727473747474757476747774787479748074817482748374847485748674877488748974907491749274937494749574967497749874997500750175027503750475057506750775087509751075117512751375147515751675177518751975207521752275237524752575267527752875297530753175327533753475357536753775387539754075417542754375447545754675477548754975507551755275537554755575567557755875597560756175627563756475657566756775687569757075717572757375747575757675777578757975807581758275837584758575867587758875897590759175927593759475957596759775987599760076017602760376047605760676077608760976107611761276137614761576167617761876197620762176227623762476257626762776287629763076317632763376347635763676377638763976407641764276437644764576467647764876497650765176527653765476557656765776587659766076617662766376647665766676677668766976707671767276737674767576767677767876797680768176827683768476857686768776887689769076917692769376947695769676977698769977007701770277037704770577067707770877097710771177127713771477157716771777187719772077217722772377247725772677277728772977307731773277337734773577367737773877397740774177427743774477457746774777487749775077517752775377547755775677577758775977607761776277637764776577667767776877697770777177727773777477757776777777787779778077817782778377847785778677877788778977907791779277937794779577967797779877997800780178027803780478057806780778087809781078117812781378147815781678177818781978207821782278237824782578267827782878297830783178327833783478357836783778387839784078417842784378447845784678477848784978507851785278537854785578567857785878597860786178627863786478657866786778687869787078717872787378747875787678777878787978807881788278837884788578867887788878897890789178927893789478957896789778987899790079017902790379047905790679077908790979107911791279137914791579167917791879197920792179227923792479257926792779287929793079317932793379347935793679377938793979407941794279437944794579467947794879497950795179527953795479557956795779587959796079617962796379647965796679677968796979707971797279737974797579767977797879797980798179827983798479857986798779887989799079917992799379947995799679977998799980008001800280038004800580068007800880098010801180128013801480158016801780188019802080218022802380248025802680278028802980308031803280338034803580368037803880398040804180428043804480458046804780488049805080518052805380548055805680578058805980608061806280638064806580668067806880698070807180728073807480758076807780788079808080818082808380848085808680878088808980908091809280938094809580968097809880998100810181028103810481058106810781088109811081118112811381148115811681178118811981208121812281238124812581268127812881298130813181328133813481358136813781388139814081418142814381448145814681478148814981508151815281538154815581568157815881598160816181628163816481658166816781688169817081718172817381748175817681778178817981808181818281838184818581868187818881898190819181928193819481958196819781988199820082018202820382048205820682078208820982108211821282138214821582168217821882198220822182228223822482258226822782288229823082318232823382348235823682378238823982408241824282438244824582468247824882498250825182528253825482558256825782588259826082618262826382648265826682678268826982708271827282738274827582768277827882798280828182828283828482858286828782888289829082918292829382948295829682978298829983008301830283038304830583068307830883098310831183128313831483158316831783188319832083218322832383248325832683278328832983308331833283338334833583368337833883398340834183428343834483458346834783488349835083518352835383548355835683578358835983608361836283638364836583668367836883698370837183728373837483758376837783788379838083818382838383848385838683878388838983908391839283938394839583968397839883998400840184028403840484058406840784088409841084118412841384148415841684178418841984208421842284238424842584268427842884298430843184328433843484358436843784388439844084418442844384448445844684478448844984508451845284538454845584568457845884598460846184628463846484658466846784688469847084718472847384748475847684778478847984808481848284838484848584868487848884898490849184928493849484958496849784988499850085018502850385048505850685078508850985108511851285138514851585168517851885198520852185228523852485258526852785288529853085318532853385348535853685378538853985408541854285438544854585468547 |
- openapi: 3.0.0
- info:
- title: PeerTube
- version: 4.0.0
- 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: |
- 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 [REST API quick start](https://docs.joinpeertube.org/api-rest-getting-started) for a few
- examples of using the PeerTube API.
- # Authentication
- When you sign up for an account on a PeerTube instance, you are given the possibility
- to generate sessions on it, and authenticate there using an access token. Only __one
- access 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, completed by a [RFC7807-compliant](https://tools.ietf.org/html/rfc7807) response body.
- ```
- HTTP 1.1 404 Not Found
- Content-Type: application/problem+json; charset=utf-8
- {
- "detail": "Video not found",
- "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
- "status": 404,
- "title": "Not Found",
- "type": "about:blank"
- }
- ```
- We provide error `type` values for [a growing number of cases](https://github.com/Chocobozzz/PeerTube/blob/develop/shared/models/server/server-error-code.enum.ts),
- but it is still optional. Types are used to disambiguate errors that bear the same status code
- and are non-obvious:
- ```
- HTTP 1.1 403 Forbidden
- Content-Type: application/problem+json; charset=utf-8
- {
- "detail": "Cannot get this video regarding follow constraints",
- "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
- "status": 403,
- "title": "Forbidden",
- "type": "https://docs.joinpeertube.org/api-rest-reference.html#section/Errors/does_not_respect_follow_constraints"
- }
- ```
- Here a 403 error could otherwise mean that the video is private or blocklisted.
- ### Validation errors
- Each parameter is evaluated on its own against a set of rules before the route validator
- proceeds with potential testing involving parameter combinations. Errors coming from validation
- errors appear earlier and benefit from a more detailed error description:
- ```
- HTTP 1.1 400 Bad Request
- Content-Type: application/problem+json; charset=utf-8
- {
- "detail": "Incorrect request parameters: id",
- "docs": "https://docs.joinpeertube.org/api-rest-reference.html#operation/getVideo",
- "instance": "/api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180",
- "invalid-params": {
- "id": {
- "location": "params",
- "msg": "Invalid value",
- "param": "id",
- "value": "9c9de5e8-0a1e-484a-b099-e80766180"
- }
- },
- "status": 400,
- "title": "Bad Request",
- "type": "about:blank"
- }
- ```
- Where `id` is the name of the field concerned by the error, within the route definition.
- `invalid-params.<field>.location` can be either 'params', 'body', 'header', 'query' or 'cookies', and
- `invalid-params.<field>.value` reports the value that didn't pass validation whose `invalid-params.<field>.msg`
- is about.
- ### Deprecated error fields
- Some fields could be included with previous versions. They are still included but their use is deprecated:
- - `error`: superseded by `detail`
- - `code`: superseded by `type` (which is now an URI)
- # Rate limits
- We are rate-limiting all endpoints of PeerTube's API. Custom values can be set by administrators:
- | Endpoint (prefix: `/api/v1`) | Calls | Time frame |
- |------------------------------|---------------|--------------|
- | `/*` | 50 | 10 seconds |
- | `POST /users/token` | 15 | 5 minutes |
- | `POST /users/register` | 2<sup>*</sup> | 5 minutes |
- | `POST /users/ask-send-verify-email` | 3 | 5 minutes |
- Depending on the endpoint, <sup>*</sup>failed requests are not taken into account. A service
- limit is announced by a `429 Too Many Requests` status code.
- You can get details about the current state of your rate limit by reading the
- following headers:
- | Header | Description |
- |-------------------------|------------------------------------------------------------|
- | `X-RateLimit-Limit` | Number of max requests allowed in the current time period |
- | `X-RateLimit-Remaining` | Number of remaining requests in the current time period |
- | `X-RateLimit-Reset` | Timestamp of end of current time period as UNIX timestamp |
- | `Retry-After` | Seconds to delay after the first `429` is received |
- # CORS
- This API features [Cross-Origin Resource Sharing (CORS)](https://fetch.spec.whatwg.org/),
- allowing cross-domain communication from the browser for some routes:
- | Endpoint |
- |------------------------- ---|
- | `/api/*` |
- | `/download/*` |
- | `/lazy-static/*` |
- | `/.well-known/webfinger` |
- In addition, all routes serving ActivityPub are CORS-enabled for all origins.
- externalDocs:
- url: https://docs.joinpeertube.org/api-rest-reference.html
- tags:
- - name: Register
- description: |
- As a visitor, you can use this API to open an account (if registrations are open on
- that PeerTube instance). As an admin, you should use the dedicated [User creation
- API](#operation/addUser) instead.
- - name: Session
- x-displayName: Login/Logout
- description: |
- Sessions deal with access tokens over time. Only __one session token can currently be used at a time__.
- - 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](#tag/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: Video Upload
- description: |
- Operations dealing with adding video or audio. PeerTube supports two upload modes, and three import modes.
- ### Upload
- - [_legacy_](#operation/uploadLegacy), where the video file is sent in a single request
- - [_resumable_](#operation/uploadResumableInit), where the video file is sent in chunks
- You can upload videos more reliably by using the resumable variant. Its protocol lets
- you resume an upload operation after a network interruption or other transmission failure,
- saving time and bandwidth in the event of network failures.
- Favor using resumable uploads in any of the following cases:
- - You are transferring large files
- - The likelihood of a network interruption is high
- - Uploads are originating from a device with a low-bandwidth or unstable Internet connection,
- such as a mobile device
- ### Import
- - _URL_-based: where the URL points to any service supported by [youtube-dl](https://ytdl-org.github.io/youtube-dl/)
- - _magnet_-based: where the URI resolves to a BitTorrent resource containing a single supported video file
- - _torrent_-based: where the metainfo file resolves to a BitTorrent resource containing a single supported video file
- The import function is practical when the desired video/audio is available online. It makes PeerTube
- download it for you, saving you as much bandwidth and avoiding any instability or limitation your network might have.
- - name: Video Imports
- description: Operations dealing with listing, adding and removing video imports.
- - name: Channels Sync
- description: Operations dealing with synchronizing PeerTube user's channel with channels of other platforms
- - name: Video Captions
- description: Operations dealing with listing, adding and removing closed captions of a video.
- - name: Video Channels
- description: Operations dealing with the creation, modification and listing of videos within a channel.
- - name: Video Comments
- description: >
- Operations dealing with comments to a video. Comments are organized in threads: adding a
- comment in response to the video starts a thread, adding a reply to a comment adds it to
- its root comment thread.
- - 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: Video Playlists
- description: Operations dealing with playlists of videos. Playlists are bound to users and/or channels.
- - name: Video Files
- description: Operations on video files
- - name: Video Transcoding
- description: Video transcoding related operations
- - name: Video stats
- description: Video statistics
- - name: Video Feeds
- description: Server syndication feeds of 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: Homepage
- description: Get and update the custom homepage
- - name: Video Mirroring
- description: |
- PeerTube instances can mirror videos from one another, and help distribute some videos.
- For importing videos as your own, refer to [video imports](#operation/importVideo).
- - name: Stats
- description: |
- Statistics
- x-tagGroups:
- - name: Static endpoints
- tags:
- - Static Video Files
- - name: Feeds
- tags:
- - Video Feeds
- - name: Auth
- tags:
- - Register
- - Session
- - name: Accounts
- tags:
- - Accounts
- - Users
- - My User
- - My Subscriptions
- - My Notifications
- - My History
- - name: Videos
- tags:
- - Video
- - Video Upload
- - Video Imports
- - Video Captions
- - Video Channels
- - Video Comments
- - Video Rates
- - Video Playlists
- - Video Stats
- - Video Ownership Change
- - Video Mirroring
- - Video Files
- - Video Transcoding
- - Live Videos
- - Channels Sync
- - name: Search
- tags:
- - Search
- - name: Moderation
- tags:
- - Abuses
- - Video Blocks
- - Account Blocks
- - Server Blocks
- - name: Instance
- tags:
- - Config
- - Homepage
- - Instance Follows
- - Instance Redundancy
- - Plugins
- - Stats
- - Logs
- - Job
- paths:
- '/static/webseed/{filename}':
- get:
- tags:
- - Static Video Files
- summary: Get public WebTorrent video file
- parameters:
- - $ref: '#/components/parameters/staticFilename'
- responses:
- '200':
- description: successful operation
- '404':
- description: not found
- '/static/webseed/private/{filename}':
- get:
- tags:
- - Static Video Files
- summary: Get private WebTorrent video file
- parameters:
- - $ref: '#/components/parameters/staticFilename'
- - $ref: '#/components/parameters/videoFileToken'
- security:
- - OAuth2: []
- responses:
- '200':
- description: successful operation
- '403':
- description: invalid auth
- '404':
- description: not found
- '/static/streaming-playlists/hls/{filename}':
- get:
- tags:
- - Static Video Files
- summary: Get public HLS video file
- parameters:
- - $ref: '#/components/parameters/staticFilename'
- security:
- - OAuth2: []
- responses:
- '200':
- description: successful operation
- '403':
- description: invalid auth
- '404':
- description: not found
- '/static/streaming-playlists/hls/private/{filename}':
- get:
- tags:
- - Static Video Files
- summary: Get private HLS video file
- parameters:
- - $ref: '#/components/parameters/staticFilename'
- - $ref: '#/components/parameters/videoFileToken'
- - $ref: '#/components/parameters/reinjectVideoFileToken'
- security:
- - OAuth2: []
- responses:
- '200':
- description: successful operation
- '403':
- description: invalid auth
- '404':
- description: not found
- '/feeds/video-comments.{format}':
- get:
- tags:
- - Video Feeds
- summary: List comments on videos
- operationId: getSyndicatedComments
- 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'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
- application/rss+xml:
- schema:
- $ref: '#/components/schemas/VideoCommentsForXML'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/video-comments.rss?filter=local
- text/xml:
- schema:
- $ref: '#/components/schemas/VideoCommentsForXML'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/video-comments.xml?filter=local
- application/atom+xml:
- schema:
- $ref: '#/components/schemas/VideoCommentsForXML'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/video-comments.atom?filter=local
- application/json:
- schema:
- type: object
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/video-comments.json?filter=local
- '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:
- - Video Feeds
- summary: List videos
- operationId: getSyndicatedVideos
- 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/isLocal'
- - $ref: '#/components/parameters/include'
- - $ref: '#/components/parameters/privacyOneOf'
- - $ref: '#/components/parameters/hasHLSFiles'
- - $ref: '#/components/parameters/hasWebtorrentFiles'
- 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'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/videos.rss?filter=local
- text/xml:
- schema:
- $ref: '#/components/schemas/VideosForXML'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/videos.xml?filter=local
- application/atom+xml:
- schema:
- $ref: '#/components/schemas/VideosForXML'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/videos.atom?filter=local
- application/json:
- schema:
- type: object
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/feeds/videos.json?filter=local
- '404':
- description: video channel or account not found
- '406':
- description: accept header unsupported
- '/feeds/subscriptions.{format}':
- get:
- tags:
- - Video Feeds
- summary: List videos of subscriptions tied to a token
- operationId: getSyndicatedSubscriptionVideos
- 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
- required: true
- - name: token
- in: query
- description: private token allowing access
- schema:
- type: string
- required: true
- - $ref: '#/components/parameters/sort'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/isLocal'
- - $ref: '#/components/parameters/include'
- - $ref: '#/components/parameters/privacyOneOf'
- - $ref: '#/components/parameters/hasHLSFiles'
- - $ref: '#/components/parameters/hasWebtorrentFiles'
- 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'
- 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
- '406':
- description: accept header unsupported
- '/api/v1/accounts/{name}':
- get:
- tags:
- - Accounts
- summary: Get an account
- operationId: getAccount
- parameters:
- - $ref: '#/components/parameters/name'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/Account'
- '404':
- description: account not found
- '/api/v1/accounts/{name}/videos':
- get:
- tags:
- - Accounts
- - Video
- summary: 'List videos of an account'
- operationId: getAccountVideos
- parameters:
- - $ref: '#/components/parameters/name'
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/isLive'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/isLocal'
- - $ref: '#/components/parameters/include'
- - $ref: '#/components/parameters/privacyOneOf'
- - $ref: '#/components/parameters/hasHLSFiles'
- - $ref: '#/components/parameters/hasWebtorrentFiles'
- - $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-codeSamples:
- - 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)
- '/api/v1/accounts/{name}/followers':
- get:
- tags:
- - Accounts
- summary: 'List followers of an account'
- security:
- - OAuth2: []
- operationId: getAccountFollowers
- parameters:
- - $ref: '#/components/parameters/name'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/followersSort'
- - $ref: '#/components/parameters/search'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/Follow'
- /api/v1/accounts:
- get:
- tags:
- - Accounts
- summary: List accounts
- operationId: getAccounts
- 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'
- /api/v1/config:
- get:
- tags:
- - Config
- summary: Get instance public configuration
- operationId: getConfig
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ServerConfig'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/api/v1/config
- /api/v1/config/about:
- get:
- summary: Get instance "About" information
- operationId: getAbout
- tags:
- - Config
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ServerConfigAbout'
- examples:
- nightly:
- externalValue: https://peertube2.cpy.re/api/v1/config/about
- /api/v1/config/custom:
- get:
- summary: Get instance runtime configuration
- operationId: getCustomConfig
- tags:
- - Config
- security:
- - OAuth2:
- - admin
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ServerConfigCustom'
- put:
- summary: Set instance runtime configuration
- operationId: putCustomConfig
- 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
- operationId: delCustomConfig
- tags:
- - Config
- security:
- - OAuth2:
- - admin
- responses:
- '200':
- description: successful operation
- /api/v1/custom-pages/homepage/instance:
- get:
- summary: Get instance custom homepage
- tags:
- - Homepage
- responses:
- '404':
- description: No homepage set
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/CustomHomepage'
- put:
- summary: Set instance custom homepage
- tags:
- - Homepage
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- content:
- type: string
- description: content of the homepage, that will be injected in the client
- responses:
- '204':
- description: successful operation
- /api/v1/jobs/pause:
- post:
- summary: Pause job queue
- security:
- - OAuth2:
- - admin
- tags:
- - Job
- responses:
- '204':
- description: successful operation
- /api/v1/jobs/resume:
- post:
- summary: Resume job queue
- security:
- - OAuth2:
- - admin
- tags:
- - Job
- responses:
- '204':
- description: successful operation
- /api/v1/jobs/{state}:
- get:
- summary: List instance jobs
- operationId: getJobs
- 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'
- /api/v1/server/followers:
- get:
- tags:
- - Instance Follows
- summary: List instances following the server
- parameters:
- - $ref: '#/components/parameters/followState'
- - $ref: '#/components/parameters/actorType'
- - $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/Follow'
- '/api/v1/server/followers/{nameWithHost}':
- delete:
- summary: Remove or reject a follower to your server
- security:
- - OAuth2:
- - admin
- tags:
- - Instance Follows
- parameters:
- - name: nameWithHost
- in: path
- required: true
- description: The remote actor handle to remove from your followers
- schema:
- type: string
- format: email
- responses:
- '204':
- description: successful operation
- '404':
- description: follower not found
- '/api/v1/server/followers/{nameWithHost}/reject':
- post:
- summary: Reject a pending follower to your server
- security:
- - OAuth2:
- - admin
- tags:
- - Instance Follows
- parameters:
- - name: nameWithHost
- in: path
- required: true
- description: The remote actor handle to remove from your followers
- schema:
- type: string
- format: email
- responses:
- '204':
- description: successful operation
- '404':
- description: follower not found
- '/api/v1/server/followers/{nameWithHost}/accept':
- post:
- summary: Accept a pending follower to your server
- security:
- - OAuth2:
- - admin
- tags:
- - Instance Follows
- parameters:
- - name: nameWithHost
- in: path
- required: true
- description: The remote actor handle to remove from your followers
- schema:
- type: string
- format: email
- responses:
- '204':
- description: successful operation
- '404':
- description: follower not found
- /api/v1/server/following:
- get:
- tags:
- - Instance Follows
- summary: List instances followed by the server
- parameters:
- - $ref: '#/components/parameters/followState'
- - $ref: '#/components/parameters/actorType'
- - $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/Follow'
- post:
- security:
- - OAuth2:
- - admin
- tags:
- - Instance Follows
- summary: Follow a list of actors (PeerTube instance, channel or account)
- 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
- handles:
- type: array
- items:
- type: string
- uniqueItems: true
- '/api/v1/server/following/{hostOrHandle}':
- delete:
- summary: Unfollow an actor (PeerTube instance, channel or account)
- security:
- - OAuth2:
- - admin
- tags:
- - Instance Follows
- parameters:
- - name: hostOrHandle
- in: path
- required: true
- description: The hostOrHandle to unfollow
- schema:
- type: string
- responses:
- '204':
- description: successful operation
- '404':
- description: host or handle not found
- /api/v1/users:
- post:
- summary: Create a user
- operationId: addUser
- security:
- - OAuth2:
- - admin
- tags:
- - Users
- responses:
- '200':
- description: user created
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/AddUserResponse'
- links:
- # GET /users/{id}
- GetUser:
- operationId: getUser
- parameters:
- id: '$response.body#/user/id'
- # PUT /users/{id}
- PutUser:
- operationId: putUser
- parameters:
- id: '$response.body#/user/id'
- # DELETE /users/{id}
- DelUser:
- operationId: delUser
- 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: |
- If the smtp server is configured, you can leave the password empty and an email will be sent
- asking the user to set it first.
- required: true
- get:
- summary: List users
- operationId: getUsers
- 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'
- '/api/v1/users/{id}':
- parameters:
- - $ref: '#/components/parameters/id'
- delete:
- summary: Delete a user
- security:
- - OAuth2:
- - admin
- tags:
- - Users
- operationId: delUser
- responses:
- '204':
- description: successful operation
- get:
- summary: Get a user
- security:
- - OAuth2: []
- tags:
- - Users
- operationId: getUser
- parameters:
- - name: withStats
- in: query
- description: include statistics about the user (only available as a moderator/admin)
- schema:
- type: boolean
- responses:
- '200':
- x-summary: successful operation
- description: |
- As an admin/moderator, you can request a response augmented with statistics about the user's
- moderation relations and videos usage, by using the `withStats` parameter.
- content:
- application/json:
- schema:
- oneOf:
- - $ref: '#/components/schemas/User'
- - $ref: '#/components/schemas/UserWithStats'
- put:
- summary: Update a user
- security:
- - OAuth2: []
- tags:
- - Users
- operationId: putUser
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UpdateUser'
- required: true
- /api/v1/oauth-clients/local:
- get:
- summary: Login prerequisite
- description: You need to retrieve a client id and secret before [logging in](#operation/getOAuthToken).
- operationId: getOAuthClient
- tags:
- - Session
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/OAuthClient'
- links:
- UseOAuthClientToLogin:
- operationId: getOAuthToken
- parameters:
- client_id: '$response.body#/client_id'
- client_secret: '$response.body#/client_secret'
- x-codeSamples:
- - lang: Shell
- source: |
- API="https://peertube2.cpy.re/api/v1"
- ## AUTH
- curl -s "$API/oauth-clients/local"
- /api/v1/users/token:
- post:
- summary: Login
- operationId: getOAuthToken
- description: With your [client id and secret](#operation/getOAuthClient), you can retrieve an access and refresh tokens.
- tags:
- - Session
- requestBody:
- content:
- application/x-www-form-urlencoded:
- schema:
- oneOf:
- - $ref: '#/components/schemas/OAuthToken-password'
- - $ref: '#/components/schemas/OAuthToken-refresh_token'
- discriminator:
- propertyName: grant_type
- mapping:
- password: '#/components/schemas/OAuthToken-password'
- refresh_token: '#/components/schemas/OAuthToken-refresh_token'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- token_type:
- type: string
- example: Bearer
- access_token:
- type: string
- example: 90286a0bdf0f7315d9d3fe8dabf9e1d2be9c97d0
- description: valid for 1 day
- refresh_token:
- type: string
- example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
- description: valid for 2 weeks
- expires_in:
- type: integer
- minimum: 0
- example: 14399
- refresh_token_expires_in:
- type: integer
- minimum: 0
- example: 1209600
- '400':
- x-summary: client or credentials are invalid
- description: |
- Disambiguate via `type`:
- - `invalid_client` for an unmatched `client_id`
- - `invalid_grant` for unmatched credentials
- '401':
- x-summary: token expired
- description: |
- Disambiguate via `type`:
- - default value for a regular authentication failure
- - `invalid_token` for an expired token
- x-codeSamples:
- - lang: Shell
- source: |
- ## DEPENDENCIES: jq
- API="https://peertube2.cpy.re/api/v1"
- USERNAME="<your_username>"
- PASSWORD="<your_password>"
- ## AUTH
- client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
- client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
- curl -s "$API/users/token" \
- --data client_id="$client_id" \
- --data client_secret="$client_secret" \
- --data grant_type=password \
- --data username="$USERNAME" \
- --data password="$PASSWORD" \
- | jq -r ".access_token"
- /api/v1/users/revoke-token:
- post:
- summary: Logout
- description: Revokes your access token and its associated refresh token, destroying your current session.
- operationId: revokeOAuthToken
- tags:
- - Session
- security:
- - OAuth2: []
- responses:
- '200':
- description: successful operation
- /api/v1/users/register:
- post:
- summary: Register a user
- operationId: registerUser
- tags:
- - Users
- - Register
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/RegisterUser'
- required: true
- /api/v1/users/{id}/verify-email:
- post:
- summary: Verify a user
- operationId: verifyUser
- description: |
- Following a user registration, the new user will receive an email asking to click a link
- containing a secret.
- tags:
- - Users
- - Register
- parameters:
- - $ref: '#/components/parameters/id'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- verificationString:
- type: string
- format: url
- isPendingEmail:
- type: boolean
- required:
- - verificationString
- responses:
- '204':
- description: successful operation
- '403':
- description: invalid verification string
- '404':
- description: user not found
- /api/v1/users/{id}/two-factor/request:
- post:
- summary: Request two factor auth
- operationId: requestTwoFactor
- description: Request two factor authentication for a user
- tags:
- - Users
- parameters:
- - $ref: '#/components/parameters/id'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- currentPassword:
- type: string
- description: Password of the currently authenticated user
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- $ref: '#/components/schemas/RequestTwoFactorResponse'
- '403':
- description: invalid password
- '404':
- description: user not found
- /api/v1/users/{id}/two-factor/confirm-request:
- post:
- summary: Confirm two factor auth
- operationId: confirmTwoFactorRequest
- description: Confirm a two factor authentication request
- tags:
- - Users
- parameters:
- - $ref: '#/components/parameters/id'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- requestToken:
- type: string
- description: Token to identify the two factor request
- otpToken:
- type: string
- description: OTP token generated by the app
- required:
- - requestToken
- - otpToken
- responses:
- '204':
- description: successful operation
- '403':
- description: invalid request token or OTP token
- '404':
- description: user not found
- /api/v1/users/{id}/two-factor/disable:
- post:
- summary: Disable two factor auth
- operationId: disableTwoFactor
- description: Disable two factor authentication of a user
- tags:
- - Users
- parameters:
- - $ref: '#/components/parameters/id'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- currentPassword:
- type: string
- description: Password of the currently authenticated user
- responses:
- '204':
- description: successful operation
- '403':
- description: invalid password
- '404':
- description: user not found
- /api/v1/users/ask-send-verify-email:
- post:
- summary: Resend user verification link
- operationId: resendEmailToVerifyUser
- tags:
- - Users
- - Register
- responses:
- '204':
- description: successful operation
- /api/v1/users/me:
- get:
- summary: Get my user information
- operationId: getUserInfo
- 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
- operationId: putUserInfo
- security:
- - OAuth2:
- - user
- tags:
- - My User
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UpdateMe'
- required: true
- /api/v1/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'
- -
- name: targetUrl
- in: query
- required: false
- description: Filter on import target URL
- schema:
- type: string
- -
- name: videoChannelSyncId
- in: query
- required: false
- description: Filter on imports created by a specific channel synchronization
- schema:
- type: number
- -
- name: search
- in: query
- required: false
- description: Search in video names
- schema:
- type: string
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoImportsList'
- /api/v1/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: object
- properties:
- videoQuotaUsed:
- type: number
- description: The user video quota used so far in bytes
- example: 16810141515
- videoQuotaUsedDaily:
- type: number
- description: The user video quota used today in bytes
- example: 1681014151
- '/api/v1/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:
- $ref: '#/components/schemas/Video/properties/id'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/GetMeVideoRating'
- /api/v1/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'
- /api/v1/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
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannelList'
- 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
- /api/v1/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
- /api/v1/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/isLive'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/isLocal'
- - $ref: '#/components/parameters/include'
- - $ref: '#/components/parameters/privacyOneOf'
- - $ref: '#/components/parameters/hasHLSFiles'
- - $ref: '#/components/parameters/hasWebtorrentFiles'
- - $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'
- '/api/v1/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
- /api/v1/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'
- /api/v1/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
- /api/v1/users/me/notifications/read-all:
- post:
- summary: Mark all my notification as read
- security:
- - OAuth2: []
- tags:
- - My Notifications
- responses:
- '204':
- description: successful operation
- /api/v1/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
- /api/v1/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'
- /api/v1/users/me/history/videos/{videoId}:
- delete:
- summary: Delete history element
- security:
- - OAuth2: []
- tags:
- - My History
- parameters:
- - name: videoId
- in: path
- required: true
- schema:
- $ref: '#/components/schemas/Video/properties/id'
- responses:
- '204':
- description: successful operation
- /api/v1/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
- /api/v1/users/me/avatar/pick:
- post:
- summary: Update my user avatar
- security:
- - OAuth2: []
- tags:
- - My User
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- avatars:
- type: array
- items:
- $ref: '#/components/schemas/ActorImage'
- '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
- /api/v1/users/me/avatar:
- delete:
- summary: Delete my avatar
- security:
- - OAuth2: []
- tags:
- - My User
- responses:
- '204':
- description: successful operation
- /api/v1/videos/ownership:
- get:
- summary: List video ownership changes
- tags:
- - Video Ownership Change
- security:
- - OAuth2: []
- responses:
- '200':
- description: successful operation
- '/api/v1/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 ownership change not found
- '/api/v1/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 ownership change not found
- '/api/v1/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
- '/api/v1/videos/{id}/token':
- post:
- summary: Request video token
- operationId: requestVideoToken
- description: Request special tokens that expire quickly to use them in some context (like accessing private static files)
- tags:
- - Video
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoTokenResponse'
- '400':
- description: incorrect parameters
- '404':
- description: video not found
- /api/v1/videos/{id}/studio/edit:
- post:
- summary: Create a studio task
- tags:
- - Video Transcoding
- - Video
- description: Create a task to edit a video (cut, add intro/outro etc)
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- required: true
- content:
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/VideoStudioCreateTask'
- responses:
- '204':
- description: successful operation
- '400':
- description: incorrect parameters
- '404':
- description: video not found
- /api/v1/videos:
- get:
- summary: List videos
- operationId: getVideos
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/isLive'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/isLocal'
- - $ref: '#/components/parameters/include'
- - $ref: '#/components/parameters/privacyOneOf'
- - $ref: '#/components/parameters/hasHLSFiles'
- - $ref: '#/components/parameters/hasWebtorrentFiles'
- - $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'
- /api/v1/videos/categories:
- get:
- summary: List available video categories
- operationId: getCategories
- 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
- /api/v1/videos/licences:
- get:
- summary: List available video licences
- operationId: getLicences
- 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
- /api/v1/videos/languages:
- get:
- summary: List available video languages
- operationId: getLanguages
- 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
- /api/v1/videos/privacies:
- get:
- summary: List available video privacy policies
- operationId: getPrivacyPolicies
- 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
- '/api/v1/videos/{id}':
- put:
- summary: Update a video
- operationId: putVideo
- 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:
- $ref: '#/components/schemas/VideoCategorySet'
- licence:
- $ref: '#/components/schemas/VideoLicenceSet'
- language:
- $ref: '#/components/schemas/VideoLanguageSet'
- 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 our work on https://soutenir.framasoft.org/en/ <3
- type: string
- nsfw:
- description: Whether or not this video contains sensitive content
- type: boolean
- name:
- description: Video name
- type: string
- minLength: 3
- maxLength: 120
- 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
- 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
- operationId: getVideo
- 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
- operationId: delVideo
- security:
- - OAuth2: []
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '/api/v1/videos/{id}/description':
- get:
- summary: Get complete video description
- operationId: getVideoDesc
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- nullable: true
- type: string
- minLength: 3
- maxLength: 10000
- example: |
- **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**
- '/api/v1/videos/{id}/source':
- post:
- summary: Get video source file metadata
- operationId: getVideoSource
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoSource'
- '/api/v1/videos/{id}/views':
- post:
- summary: Notify user is watching a video
- description: Call this endpoint regularly (every 5-10 seconds for example) to notify the server the user is watching the video. After a while, PeerTube will increase video's viewers counter. If the user is authenticated, PeerTube will also store the current player time.
- operationId: addView
- tags:
- - Video
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UserViewingVideo'
- required: true
- responses:
- '204':
- description: successful operation
- '/api/v1/videos/{id}/watching':
- put:
- summary: Set watching progress of a video
- deprecated: true
- description: This endpoint has been deprecated. Use `/videos/{id}/views` instead
- tags:
- - Video
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/UserViewingVideo'
- required: true
- responses:
- '204':
- description: successful operation
- '/api/v1/videos/{id}/stats/overall':
- get:
- summary: Get overall stats of a video
- tags:
- - Video Stats
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- - name: startDate
- in: query
- description: Filter stats by start date
- schema:
- type: string
- format: date-time
- - name: endDate
- in: query
- description: Filter stats by end date
- schema:
- type: string
- format: date-time
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoStatsOverall'
- '/api/v1/videos/{id}/stats/retention':
- get:
- summary: Get retention stats of a video
- tags:
- - Video Stats
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoStatsRetention'
- '/api/v1/videos/{id}/stats/timeseries/{metric}':
- get:
- summary: Get timeserie stats of a video
- tags:
- - Video Stats
- security:
- - OAuth2: []
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- -
- name: metric
- in: path
- required: true
- description: The metric to get
- schema:
- type: string
- enum:
- - 'viewers'
- - 'aggregateWatchTime'
- - name: startDate
- in: query
- description: Filter stats by start date
- schema:
- type: string
- format: date-time
- - name: endDate
- in: query
- description: Filter stats by end date
- schema:
- type: string
- format: date-time
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoStatsTimeserie'
- /api/v1/videos/upload:
- post:
- summary: Upload a video
- description: Uses a single request to upload a video.
- operationId: uploadLegacy
- security:
- - OAuth2: []
- tags:
- - Video
- - Video Upload
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoUploadResponse'
- '403':
- description: video didn't pass upload filter
- '408':
- description: upload has timed out
- '413':
- x-summary: video file too large, due to quota or max body size limit set by the reverse-proxy
- description: |
- If the response has no body, it means the reverse-proxy didn't let it through. Otherwise disambiguate via `type`:
- - `quota_reached` for quota limits whether daily or global
- 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:
- $ref: '#/components/schemas/VideoUploadRequestLegacy'
- 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-codeSamples:
- - 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="https://peertube2.cpy.re/api/v1"
- ## AUTH
- client_id=$(curl -s "$API/oauth-clients/local" | jq -r ".client_id")
- client_secret=$(curl -s "$API/oauth-clients/local" | jq -r ".client_secret")
- token=$(curl -s "$API/users/token" \
- --data client_id="$client_id" \
- --data client_secret="$client_secret" \
- --data grant_type=password \
- --data username="$USERNAME" \
- --data password="$PASSWORD" \
- | jq -r ".access_token")
- ## VIDEO UPLOAD
- curl -s "$API/videos/upload" \
- -H "Authorization: Bearer $token" \
- --max-time 600 \
- --form videofile=@"$FILE_PATH" \
- --form channelId=$CHANNEL_ID \
- --form name="$NAME"
- /api/v1/videos/upload-resumable:
- post:
- summary: Initialize the resumable upload of a video
- description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to initialize the upload of a video
- operationId: uploadResumableInit
- security:
- - OAuth2: []
- tags:
- - Video
- - Video Upload
- parameters:
- - name: X-Upload-Content-Length
- in: header
- schema:
- type: number
- example: 2469036
- required: true
- description: Number of bytes that will be uploaded in subsequent requests. Set this value to the size of the file you are uploading.
- - name: X-Upload-Content-Type
- in: header
- schema:
- type: string
- format: mimetype
- example: video/mp4
- required: true
- description: MIME type of the file that you are uploading. Depending on your instance settings, acceptable values might vary.
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoUploadRequestResumable'
- responses:
- '200':
- description: file already exists, send a [`resume`](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) request instead
- '201':
- description: created
- headers:
- Location:
- schema:
- type: string
- format: url
- example: /api/v1/videos/upload-resumable?upload_id=471e97554f21dec3b8bb5d4602939c51
- Content-Length:
- schema:
- type: number
- example: 0
- '413':
- x-summary: video file too large, due to quota, absolute max file size or concurrent partial upload limit
- description: |
- Disambiguate via `type`:
- - `max_file_size_reached` for the absolute file size limit
- - `quota_reached` for quota limits whether daily or global
- '415':
- description: video type unsupported
- put:
- summary: Send chunk for the resumable upload of a video
- description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to continue, pause or resume the upload of a video
- operationId: uploadResumable
- security:
- - OAuth2: []
- tags:
- - Video
- - Video Upload
- parameters:
- - name: upload_id
- in: query
- required: true
- description: |
- Created session id to proceed with. If you didn't send chunks in the last hour, it is
- not valid anymore and you need to initialize a new upload.
- schema:
- type: string
- - name: Content-Range
- in: header
- schema:
- type: string
- example: bytes 0-262143/2469036
- required: true
- description: |
- Specifies the bytes in the file that the request is uploading.
- For example, a value of `bytes 0-262143/1000000` shows that the request is sending the first
- 262144 bytes (256 x 1024) in a 2,469,036 byte file.
- - name: Content-Length
- in: header
- schema:
- type: number
- example: 262144
- required: true
- description: |
- Size of the chunk that the request is sending.
- Remember that larger chunks are more efficient. PeerTube's web client uses chunks varying from
- 1048576 bytes (~1MB) and increases or reduces size depending on connection health.
- requestBody:
- content:
- application/octet-stream:
- schema:
- type: string
- format: binary
- responses:
- '200':
- description: last chunk received
- headers:
- Content-Length:
- schema:
- type: number
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoUploadResponse'
- '308':
- description: resume incomplete
- headers:
- Range:
- schema:
- type: string
- example: bytes=0-262143
- Content-Length:
- schema:
- type: number
- example: 0
- '403':
- description: video didn't pass upload filter
- '404':
- description: upload not found
- '409':
- description: chunk doesn't match range
- '422':
- description: video unreadable
- '429':
- description: too many concurrent requests
- '503':
- description: upload is already being processed
- headers:
- 'Retry-After':
- schema:
- type: number
- example: 300
- delete:
- summary: Cancel the resumable upload of a video, deleting any data uploaded so far
- description: Uses [a resumable protocol](https://github.com/kukhariev/node-uploadx/blob/master/proto.md) to cancel the upload of a video
- operationId: uploadResumableCancel
- security:
- - OAuth2: []
- tags:
- - Video
- - Video Upload
- parameters:
- - name: upload_id
- in: query
- required: true
- description: |
- Created session id to proceed with. If you didn't send chunks in the last 12 hours, it is
- not valid anymore and the upload session has already been deleted with its data ;-)
- schema:
- type: string
- - name: Content-Length
- in: header
- required: true
- schema:
- type: number
- example: 0
- responses:
- '204':
- description: upload cancelled
- headers:
- Content-Length:
- schema:
- type: number
- example: 0
- '404':
- description: upload not found
- /api/v1/videos/imports:
- post:
- summary: Import a video
- description: Import a torrent or magnetURI or HTTP resource (if enabled by the instance administrator)
- operationId: importVideo
- security:
- - OAuth2: []
- tags:
- - Video Imports
- - Video Upload
- requestBody:
- content:
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/VideoCreateImport'
- 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
- /api/v1/videos/imports/{id}/cancel:
- post:
- summary: Cancel video import
- description: Cancel a pending video import
- security:
- - OAuth2: []
- tags:
- - Video Imports
- parameters:
- - $ref: '#/components/parameters/id'
- responses:
- '204':
- description: successful operation
- /api/v1/videos/imports/{id}:
- delete:
- summary: Delete video import
- description: Delete ended video import
- security:
- - OAuth2: []
- tags:
- - Video Imports
- parameters:
- - $ref: '#/components/parameters/id'
- responses:
- '204':
- description: successful operation
- /api/v1/videos/live:
- post:
- summary: Create a live
- operationId: addLive
- security:
- - OAuth2: []
- tags:
- - Live Videos
- - Video
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoUploadResponse'
- '400':
- x-summary: validation error, or conflicting `saveReplay` and `permanentLive` parameter set
- description: |
- Disambiguate via `type`:
- - default type for a validation error
- - `live_conflicting_permanent_and_save_replay` for conflicting parameters set
- '403':
- x-summary: live is not enabled, allow replay is not enabled, or max instance/user live videos limit is exceeded
- description: |
- Disambiguate via `type`:
- - `live_not_enabled` for a disabled live feature
- - `live_not_allowing_replay` for a disabled replay feature
- - `max_instance_lives_limit_reached` for the absolute concurrent live limit
- - `max_user_lives_limit_reached` for the user concurrent live limit
- 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
- latencyMode:
- description: User can select live latency mode if enabled by the instance
- $ref: '#/components/schemas/LiveVideoLatencyMode'
- 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:
- $ref: '#/components/schemas/VideoCategorySet'
- licence:
- $ref: '#/components/schemas/VideoLicenceSet'
- language:
- $ref: '#/components/schemas/VideoLanguageSet'
- description:
- description: Live video/replay description
- type: string
- support:
- description: A text tell the audience how to support the creator
- example: Please support our work on https://soutenir.framasoft.org/en/ <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
- minLength: 3
- maxLength: 120
- 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 video
- type: boolean
- required:
- - channelId
- - name
- encoding:
- thumbnailfile:
- contentType: image/jpeg
- previewfile:
- contentType: image/jpeg
- /api/v1/videos/live/{id}:
- get:
- summary: Get information about a live
- operationId: getLiveId
- 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 information about a live
- operationId: updateLiveId
- 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
- /api/v1/videos/live/{id}/sessions:
- get:
- summary: List live sessions
- description: List all sessions created in a particular live
- security:
- - OAuth2: []
- tags:
- - Live Videos
- 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/LiveVideoSessionResponse'
- /api/v1/videos/{id}/live-session:
- get:
- summary: Get live session of a replay
- description: If the video is a replay of a live, you can find the associated live session using this endpoint
- security:
- - OAuth2: []
- tags:
- - Live Videos
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/LiveVideoSessionResponse'
- /api/v1/users/me/abuses:
- get:
- summary: List my abuses
- operationId: getMyAbuses
- 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/abusesSort'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/Abuse'
- /api/v1/abuses:
- get:
- summary: List abuses
- operationId: getAbuses
- 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 deleted or blocklisted 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: object
- properties:
- total:
- type: integer
- example: 1
- data:
- 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: 2
- maxLength: 3000
- predefinedReasons:
- $ref: '#/components/schemas/PredefinedAbuseReasons'
- video:
- type: object
- properties:
- id:
- description: Video id to report
- allOf:
- - $ref: '#/components/schemas/Video/properties/id'
- startAt:
- type: integer
- format: seconds
- description: Timestamp in the video that marks the beginning of the report
- minimum: 0
- endAt:
- type: integer
- format: seconds
- description: Timestamp in the video that marks the ending of the report
- minimum: 0
- comment:
- type: object
- properties:
- id:
- description: Comment id to report
- allOf:
- - $ref: '#/components/schemas/VideoComment/properties/id'
- account:
- type: object
- properties:
- id:
- description: Account id to report
- type: integer
- required:
- - reason
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- abuse:
- type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- '400':
- description: incorrect request parameters
- '/api/v1/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
- minLength: 2
- maxLength: 3000
- 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
- '/api/v1/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: object
- properties:
- total:
- type: integer
- example: 1
- data:
- 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
- minLength: 2
- maxLength: 3000
- required:
- - message
- responses:
- '200':
- description: successful operation
- '400':
- description: incorrect request parameters
- '/api/v1/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
- '/api/v1/videos/{id}/blacklist':
- post:
- summary: Block a video
- operationId: addVideoBlock
- 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
- operationId: delVideoBlock
- security:
- - OAuth2:
- - admin
- - moderator
- tags:
- - Video Blocks
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '404':
- description: block not found
- /api/v1/videos/blacklist:
- get:
- tags:
- - Video Blocks
- summary: List video blocks
- operationId: getVideoBlocks
- 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'
- /api/v1/videos/{id}/captions:
- get:
- summary: List captions of a video
- operationId: getVideoCaptions
- 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'
- /api/v1/videos/{id}/captions/{captionLanguage}:
- put:
- summary: Add or replace a video caption
- operationId: addVideoCaption
- 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
- operationId: delVideoCaption
- 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
- /api/v1/video-channels:
- get:
- summary: List video channels
- operationId: getVideoChannels
- 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:
- $ref: '#/components/schemas/VideoChannelList'
- post:
- summary: Create a video channel
- operationId: addVideoChannel
- security:
- - OAuth2: []
- tags:
- - Video Channels
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- videoChannel:
- type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannelCreate'
- '/api/v1/video-channels/{channelHandle}':
- get:
- summary: Get a video channel
- operationId: getVideoChannel
- 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
- operationId: putVideoChannel
- 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
- operationId: delVideoChannel
- security:
- - OAuth2: []
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '204':
- description: successful operation
- '/api/v1/video-channels/{channelHandle}/videos':
- get:
- summary: List videos of a video channel
- operationId: getVideoChannelVideos
- tags:
- - Video
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- - $ref: '#/components/parameters/categoryOneOf'
- - $ref: '#/components/parameters/isLive'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/isLocal'
- - $ref: '#/components/parameters/include'
- - $ref: '#/components/parameters/privacyOneOf'
- - $ref: '#/components/parameters/hasHLSFiles'
- - $ref: '#/components/parameters/hasWebtorrentFiles'
- - $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'
- '/api/v1/video-channels/{channelHandle}/followers':
- get:
- tags:
- - Video Channels
- summary: 'List followers of a video channel'
- security:
- - OAuth2: []
- operationId: getVideoChannelFollowers
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/followersSort'
- - $ref: '#/components/parameters/search'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/Follow'
- '/api/v1/video-channels/{channelHandle}/avatar/pick':
- post:
- summary: Update channel avatar
- security:
- - OAuth2: []
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- avatars:
- type: array
- items:
- $ref: '#/components/schemas/ActorImage'
- '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
- '/api/v1/video-channels/{channelHandle}/avatar':
- delete:
- summary: Delete channel avatar
- security:
- - OAuth2: []
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '204':
- description: successful operation
- '/api/v1/video-channels/{channelHandle}/banner/pick':
- post:
- summary: Update channel banner
- security:
- - OAuth2: []
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- banners:
- type: array
- items:
- $ref: '#/components/schemas/ActorImage'
- '413':
- description: image file too large
- headers:
- X-File-Maximum-Size:
- schema:
- type: string
- format: Nginx size
- description: Maximum file size for the banner
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- bannerfile:
- description: The file to upload.
- type: string
- format: binary
- encoding:
- bannerfile:
- contentType: image/png, image/jpeg
- '/api/v1/video-channels/{channelHandle}/banner':
- delete:
- summary: Delete channel banner
- security:
- - OAuth2: []
- tags:
- - Video Channels
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- responses:
- '204':
- description: successful operation
- '/api/v1/video-channels/{channelHandle}/import-videos':
- post:
- summary: Import videos in channel
- description: Import a remote channel/playlist videos into a channel
- security:
- - OAuth2: []
- tags:
- - Video Channels
- - Channels Sync
- parameters:
- - $ref: '#/components/parameters/channelHandle'
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ImportVideosInChannelCreate'
- responses:
- '204':
- description: successful operation
- '/api/v1/video-channel-syncs':
- post:
- summary: Create a synchronization for a video channel
- operationId: addVideoChannelSync
- security:
- - OAuth2: []
- tags:
- - Channels Sync
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannelSyncCreate'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- videoChannelSync:
- $ref: "#/components/schemas/VideoChannelSync"
- '/api/v1/video-channel-syncs/{channelSyncId}':
- delete:
- summary: Delete a video channel synchronization
- operationId: delVideoChannelSync
- security:
- - OAuth2: []
- tags:
- - Channels Sync
- parameters:
- - $ref: '#/components/parameters/channelSyncId'
- responses:
- '204':
- description: successful operation
- '/api/v1/video-channel-syncs/{channelSyncId}/sync':
- post:
- summary: Triggers the channel synchronization job, fetching all the videos from the remote channel
- operationId: triggerVideoChannelSync
- security:
- - OAuth2: []
- tags:
- - Channels Sync
- parameters:
- - $ref: '#/components/parameters/channelSyncId'
- responses:
- '204':
- description: successful operation
- /api/v1/video-playlists/privacies:
- get:
- summary: List available playlist privacy policies
- operationId: getPlaylistPrivacyPolicies
- 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
- /api/v1/video-playlists:
- get:
- summary: List video playlists
- operationId: getPlaylists
- 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, `videoChannelId` is mandatory.
- operationId: addPlaylist
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- videoPlaylist:
- type: object
- properties:
- id:
- $ref: '#/components/schemas/VideoPlaylist/properties/id'
- uuid:
- $ref: '#/components/schemas/VideoPlaylist/properties/uuid'
- shortUUID:
- $ref: '#/components/schemas/VideoPlaylist/properties/shortUUID'
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- displayName:
- description: Video playlist display name
- type: string
- minLength: 1
- maxLength: 120
- thumbnailfile:
- description: Video playlist thumbnail file
- type: string
- format: binary
- privacy:
- $ref: '#/components/schemas/VideoPlaylistPrivacySet'
- description:
- description: Video playlist description
- type: string
- minLength: 3
- maxLength: 1000
- videoChannelId:
- allOf:
- - $ref: '#/components/schemas/id'
- description: Video channel in which the playlist will be published
- required:
- - displayName
- encoding:
- thumbnailfile:
- contentType: image/jpeg
- /api/v1/video-playlists/{playlistId}:
- get:
- summary: Get a video playlist
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/playlistId'
- 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/playlistId'
- requestBody:
- content:
- multipart/form-data:
- schema:
- type: object
- properties:
- displayName:
- description: Video playlist display name
- type: string
- minLength: 1
- maxLength: 120
- thumbnailfile:
- description: Video playlist thumbnail file
- type: string
- format: binary
- privacy:
- $ref: '#/components/schemas/VideoPlaylistPrivacySet'
- description:
- description: Video playlist description
- type: string
- videoChannelId:
- allOf:
- - $ref: '#/components/schemas/id'
- description: Video channel in which the playlist will be published
- encoding:
- thumbnailfile:
- contentType: image/jpeg
- delete:
- summary: Delete a video playlist
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/playlistId'
- responses:
- '204':
- description: successful operation
- /api/v1/video-playlists/{playlistId}/videos:
- get:
- summary: 'List videos of a playlist'
- operationId: getVideoPlaylistVideos
- tags:
- - Videos
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/playlistId'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoListResponse'
- post:
- summary: Add a video in a playlist
- operationId: addVideoPlaylistVideo
- security:
- - OAuth2: []
- tags:
- - Videos
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/playlistId'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: object
- properties:
- videoPlaylistElement:
- type: object
- properties:
- id:
- type: integer
- example: 2
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- videoId:
- oneOf:
- - $ref: '#/components/schemas/Video/properties/uuid'
- - $ref: '#/components/schemas/Video/properties/id'
- description: Video to add in the playlist
- startTimestamp:
- type: integer
- format: seconds
- description: Start the video at this specific timestamp
- stopTimestamp:
- type: integer
- format: seconds
- description: Stop the video at this specific timestamp
- required:
- - videoId
- /api/v1/video-playlists/{playlistId}/videos/reorder:
- post:
- summary: 'Reorder a playlist'
- operationId: reorderVideoPlaylist
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/playlistId'
- 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
- /api/v1/video-playlists/{playlistId}/videos/{playlistElementId}:
- put:
- summary: Update a playlist element
- operationId: putVideoPlaylistVideo
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/playlistId'
- - $ref: '#/components/parameters/playlistElementId'
- responses:
- '204':
- description: successful operation
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- startTimestamp:
- type: integer
- format: seconds
- description: Start the video at this specific timestamp
- stopTimestamp:
- type: integer
- format: seconds
- description: Stop the video at this specific timestamp
- delete:
- summary: Delete an element from a playlist
- operationId: delVideoPlaylistVideo
- security:
- - OAuth2: []
- tags:
- - Video Playlists
- parameters:
- - $ref: '#/components/parameters/playlistId'
- - $ref: '#/components/parameters/playlistElementId'
- responses:
- '204':
- description: successful operation
- '/api/v1/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:
- $ref: '#/components/schemas/Video/properties/id'
- 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
- format: seconds
- stopTimestamp:
- type: integer
- format: seconds
- '/api/v1/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 daily view statistics for the last 30 days and total views (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:
- $ref: '#/components/schemas/VideoChannelList'
- '/api/v1/accounts/{name}/video-channel-syncs':
- get:
- summary: List the synchronizations of video channels of an account
- tags:
- - Video Channels
- - Channels Sync
- - Accounts
- parameters:
- - $ref: '#/components/parameters/name'
- - $ref: '#/components/parameters/start'
- - $ref: '#/components/parameters/count'
- - $ref: '#/components/parameters/sort'
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/VideoChannelSyncList'
- '/api/v1/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'
- '/api/v1/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:
- allOf:
- - $ref: '#/components/schemas/VideoComment/properties/text'
- format: markdown
- maxLength: 10000
- required:
- - text
- '/api/v1/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'
- '/api/v1/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:
- allOf:
- - $ref: '#/components/schemas/VideoComment/properties/text'
- format: markdown
- maxLength: 10000
- 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
- '/api/v1/videos/{id}/rate':
- put:
- summary: Like/dislike a video
- security:
- - OAuth2: []
- tags:
- - Video Rates
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- rating:
- type: string
- enum:
- - like
- - dislike
- required:
- - rating
- responses:
- '204':
- description: successful operation
- '404':
- description: video does not exist
- '/api/v1/videos/{id}/hls':
- delete:
- summary: Delete video HLS files
- security:
- - OAuth2:
- - admin
- tags:
- - Video Files
- operationId: delVideoHLS
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '404':
- description: video does not exist
- '/api/v1/videos/{id}/webtorrent':
- delete:
- summary: Delete video WebTorrent files
- security:
- - OAuth2:
- - admin
- tags:
- - Video Files
- operationId: delVideoWebTorrent
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- responses:
- '204':
- description: successful operation
- '404':
- description: video does not exist
- '/api/v1/videos/{id}/transcoding':
- post:
- summary: Create a transcoding job
- security:
- - OAuth2:
- - admin
- tags:
- - Video Transcoding
- operationId: createVideoTranscoding
- parameters:
- - $ref: '#/components/parameters/idOrUUID'
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- transcodingType:
- type: string
- enum:
- - hls
- - webtorrent
- required:
- - transcodingType
- responses:
- '204':
- description: successful operation
- '404':
- description: video does not exist
- /api/v1/search/videos:
- get:
- tags:
- - Search
- summary: Search videos
- operationId: searchVideos
- 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/isLive'
- - $ref: '#/components/parameters/tagsOneOf'
- - $ref: '#/components/parameters/tagsAllOf'
- - $ref: '#/components/parameters/licenceOneOf'
- - $ref: '#/components/parameters/languageOneOf'
- - $ref: '#/components/parameters/nsfw'
- - $ref: '#/components/parameters/isLocal'
- - $ref: '#/components/parameters/include'
- - $ref: '#/components/parameters/privacyOneOf'
- - $ref: '#/components/parameters/uuids'
- - $ref: '#/components/parameters/hasHLSFiles'
- - $ref: '#/components/parameters/hasWebtorrentFiles'
- - $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
- /api/v1/search/video-channels:
- get:
- tags:
- - Search
- summary: Search channels
- operationId: searchChannels
- 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:
- $ref: '#/components/schemas/VideoChannelList'
- '500':
- description: search index unavailable
- /api/v1/search/video-playlists:
- get:
- tags:
- - Search
- summary: Search playlists
- operationId: searchPlaylists
- 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 playlist 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: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- $ref: '#/components/schemas/VideoPlaylist'
- '500':
- description: search index unavailable
- /api/v1/blocklist/status:
- get:
- tags:
- - Account Blocks
- - Server Blocks
- summary: Get block status of accounts/hosts
- parameters:
- -
- name: 'accounts'
- in: query
- description: 'Check if these accounts are blocked'
- example: [ 'goofy@example.com', 'donald@example.com' ]
- schema:
- type: array
- items:
- type: string
- -
- name: 'hosts'
- in: query
- description: 'Check if these hosts are blocked'
- example: [ 'example.com' ]
- schema:
- type: array
- items:
- type: string
- responses:
- '200':
- description: successful operation
- content:
- 'application/json':
- schema:
- $ref: '#/components/schemas/BlockStatus'
- /api/v1/server/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
- '/api/v1/server/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
- /api/v1/server/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:
- '204':
- description: successful operation
- '409':
- description: self-blocking forbidden
- '/api/v1/server/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:
- '204':
- description: successful operation
- '404':
- description: account block does not exist
- /api/v1/server/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
- /api/v1/server/redundancy/videos:
- get:
- tags:
- - Video Mirroring
- summary: List videos being mirrored
- operationId: getMirroredVideos
- 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
- operationId: putMirroredVideo
- security:
- - OAuth2:
- - admin
- requestBody:
- content:
- application/json:
- schema:
- type: object
- properties:
- videoId:
- $ref: '#/components/schemas/Video/properties/id'
- 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
- /api/v1/server/redundancy/videos/{redundancyId}:
- delete:
- tags:
- - Video Mirroring
- summary: Delete a mirror done on a video
- operationId: delMirroredVideo
- 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
- /api/v1/server/stats:
- get:
- tags:
- - Stats
- summary: Get instance stats
- description: Get instance public statistics. This endpoint is cached.
- operationId: getInstanceStats
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ServerStats'
- /api/v1/server/logs/client:
- post:
- tags:
- - Logs
- summary: Send client log
- operationId: sendClientLog
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SendClientLog'
- responses:
- '204':
- description: successful operation
- /api/v1/server/logs:
- get:
- tags:
- - Logs
- summary: Get instance logs
- operationId: getInstanceLogs
- security:
- - OAuth2:
- - admin
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- type: string
- /api/v1/server/audit-logs:
- get:
- tags:
- - Logs
- summary: Get instance audit logs
- operationId: getInstanceAuditLogs
- security:
- - OAuth2:
- - admin
- responses:
- '200':
- description: successful operation
- content:
- application/json:
- schema:
- type: array
- items:
- type: string
- /api/v1/plugins:
- get:
- tags:
- - Plugins
- summary: List plugins
- operationId: getPlugins
- 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'
- /api/v1/plugins/available:
- get:
- tags:
- - Plugins
- summary: List available plugins
- operationId: getAvailablePlugins
- 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
- /api/v1/plugins/install:
- post:
- tags:
- - Plugins
- summary: Install a plugin
- operationId: addPlugin
- 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
- /api/v1/plugins/update:
- post:
- tags:
- - Plugins
- summary: Update a plugin
- operationId: updatePlugin
- 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
- /api/v1/plugins/uninstall:
- post:
- tags:
- - Plugins
- summary: Uninstall a plugin
- operationId: uninstallPlugin
- 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
- /api/v1/plugins/{npmName}:
- get:
- tags:
- - Plugins
- summary: Get a plugin
- operationId: getPlugin
- 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
- /api/v1/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
- /api/v1/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
- /api/v1/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
- /api/v1/metrics/playback:
- post:
- summary: Create playback metrics
- description: These metrics are exposed by OpenTelemetry metrics exporter if enabled.
- tags:
- - Stats
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PlaybackMetricCreate'
- responses:
- '204':
- description: successful operation
- 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)
- 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
- schema:
- type: string
- enum:
- - name
- - -duration
- - -createdAt
- - -publishedAt
- - -views
- - -likes
- - -trending
- - -hot
- - -best
- description: >
- Sort videos by criteria (prefixing with `-` means `DESC` order):
- * `hot` - Adaptation of Reddit "hot" algorithm taking into account video views, likes, dislikes and comments and publication date
- * `best` - Same than `hot`, but also takes into account user video history
- * `trending` - Sort videos by recent views ("recent" is defined by the admin)
- * `views` - Sort videos using their `views` counter
- * `publishedAt` - Sort by video publication date (when it became publicly available)
- videosSearchSort:
- name: sort
- in: query
- required: false
- description: >
- Sort videos by criteria (prefixing with `-` means `DESC` order):
- 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 blocklists 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
- followersSort:
- name: sort
- in: query
- required: false
- description: Sort followers by criteria
- schema:
- type: string
- enum:
- - createdAt
- 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: Entity id
- schema:
- $ref: '#/components/schemas/id'
- idOrUUID:
- name: id
- in: path
- required: true
- description: The object id, uuid or short uuid
- schema:
- oneOf:
- - $ref: '#/components/schemas/id'
- - $ref: '#/components/schemas/UUIDv4'
- - $ref: '#/components/schemas/shortUUID'
- playlistId:
- name: playlistId
- in: path
- required: true
- description: Playlist id
- schema:
- $ref: '#/components/schemas/VideoPlaylist/properties/id'
- playlistElementId:
- name: playlistElementId
- in: path
- required: true
- description: Playlist element id
- schema:
- $ref: '#/components/schemas/id'
- abuseId:
- name: abuseId
- in: path
- required: true
- description: Abuse id
- schema:
- $ref: '#/components/schemas/Abuse/properties/id'
- abuseMessageId:
- name: abuseMessageId
- in: path
- required: true
- description: Abuse message id
- schema:
- $ref: '#/components/schemas/AbuseMessage/properties/id'
- captionLanguage:
- name: captionLanguage
- in: path
- required: true
- description: The caption language
- schema:
- $ref: '#/components/schemas/VideoLanguageSet'
- channelHandle:
- name: channelHandle
- in: path
- required: true
- description: The video channel handle
- schema:
- type: string
- example: my_username | my_username@example.com
- channelSyncId:
- name: channelSyncId
- in: path
- required: true
- description: Channel Sync id
- schema:
- $ref: '#/components/schemas/Abuse/properties/id'
- 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:
- $ref: '#/components/schemas/VideoComment/properties/id'
- isLive:
- name: isLive
- in: query
- required: false
- description: whether or not the video is a live
- schema:
- type: boolean
- categoryOneOf:
- name: categoryOneOf
- in: query
- required: false
- description: category id of the video (see [/videos/categories](#operation/getCategories))
- schema:
- oneOf:
- - $ref: '#/components/schemas/VideoCategorySet'
- - type: array
- items:
- $ref: '#/components/schemas/VideoCategorySet'
- style: form
- explode: false
- tagsOneOf:
- name: tagsOneOf
- in: query
- required: false
- description: tag(s) of the video
- schema:
- oneOf:
- - type: string
- - type: array
- maxItems: 5
- 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](#operation/getLanguages)). Use `_unknown` to filter on videos that don't have a video language
- schema:
- oneOf:
- - $ref: '#/components/schemas/VideoLanguageSet'
- - type: array
- items:
- $ref: '#/components/schemas/VideoLanguageSet'
- style: form
- explode: false
- licenceOneOf:
- name: licenceOneOf
- in: query
- required: false
- description: licence id of the video (see [/videos/licences](#operation/getLicences))
- schema:
- oneOf:
- - $ref: '#/components/schemas/VideoLicenceSet'
- - type: array
- items:
- $ref: '#/components/schemas/VideoLicenceSet'
- 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'
- isLocal:
- name: isLocal
- in: query
- required: false
- schema:
- type: boolean
- description: '**PeerTube >= 4.0** Display only local or remote videos'
- hasHLSFiles:
- name: hasHLSFiles
- in: query
- required: false
- schema:
- type: boolean
- description: '**PeerTube >= 4.0** Display only videos that have HLS files'
- hasWebtorrentFiles:
- name: hasWebtorrentFiles
- in: query
- required: false
- schema:
- type: boolean
- description: '**PeerTube >= 4.0** Display only videos that have WebTorrent files'
- privacyOneOf:
- name: privacyOneOf
- in: query
- required: false
- schema:
- $ref: '#/components/schemas/VideoPrivacySet'
- description: '**PeerTube >= 4.0** Display only videos in this specific privacy/privacies'
- uuids:
- name: uuids
- in: query
- required: false
- schema:
- items:
- type: string
- description: 'Find videos with specific UUIDs'
- include:
- name: include
- in: query
- required: false
- schema:
- type: integer
- enum:
- - 0
- - 1
- - 2
- - 4
- - 8
- description: >
- **PeerTube >= 4.0** Include additional videos in results (can be combined using bitwise or operator)
- - `0` NONE
- - `1` NOT_PUBLISHED_STATE
- - `2` BLACKLISTED
- - `4` BLOCKED_OWNER
- - `8` FILES
- 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-stats
- - activitypub-refresher
- - video-redundancy
- - video-live-ending
- - video-channel-import
- followState:
- name: state
- in: query
- schema:
- type: string
- enum:
- - pending
- - accepted
- actorType:
- name: actorType
- in: query
- schema:
- type: string
- enum:
- - Person
- - Application
- - Group
- - Service
- - Organization
- staticFilename:
- name: filename
- in: path
- required: true
- description: Filename
- schema:
- type: string
- videoFileToken:
- name: videoFileToken
- in: query
- required: false
- description: Video file token [generated](#operation/requestVideoToken) by PeerTube so you don't need to provide an OAuth token in the request header.
- schema:
- type: string
- reinjectVideoFileToken:
- name: reinjectVideoFileToken
- in: query
- required: false
- description: Ask the server to reinject videoFileToken in URLs in m3u8 playlist
- schema:
- type: boolean
- securitySchemes:
- OAuth2:
- description: |
- Authenticating via OAuth requires the following steps:
- - Have an activated account
- - [Generate] an access token for that account at `/api/v1/users/token`.
- - Make requests with the *Authorization: Bearer <token\>* header
- - Profit, depending on the role assigned to the account
- Note that the __access token is valid for 1 day__ and is given
- along with a __refresh token valid for 2 weeks__.
- [Generate]: https://docs.joinpeertube.org/api-rest-getting-started
- type: oauth2
- flows:
- password:
- tokenUrl: /api/v1/users/token
- scopes:
- admin: Admin scope
- moderator: Moderator scope
- user: User scope
- schemas:
- # Reusable core properties
- id:
- type: integer
- minimum: 1
- example: 42
- UUIDv4:
- type: string
- format: uuid
- example: 9c9de5e8-0a1e-484a-b099-e80766180a6d
- pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$'
- minLength: 36
- maxLength: 36
- shortUUID:
- type: string
- description: translation of a uuid v4 with a bigger alphabet to have a shorter uuid
- example: 2y84q2MQUMWPbiEcxNXMgC
- username:
- type: string
- description: immutable name of the user, used to find or mention its actor
- example: chocobozzz
- pattern: '/^[a-z0-9._]+$/'
- minLength: 1
- maxLength: 50
- usernameChannel:
- type: string
- description: immutable name of the channel, used to interact with its actor
- example: framasoft_videos
- pattern: '/^[a-zA-Z0-9\\-_.:]+$/'
- minLength: 1
- maxLength: 50
- password:
- type: string
- format: password
- minLength: 6
- maxLength: 255
- VideoCategorySet:
- type: integer
- description: category id of the video (see [/videos/categories](#operation/getCategories))
- example: 15
- VideoConstantNumber-Category:
- properties:
- id:
- $ref: '#/components/schemas/VideoCategorySet'
- label:
- type: string
- example: Science & Technology
- VideoLicenceSet:
- type: integer
- description: licence id of the video (see [/videos/licences](#operation/getLicences))
- example: 2
- VideoConstantNumber-Licence:
- properties:
- id:
- $ref: '#/components/schemas/VideoLicenceSet'
- label:
- type: string
- example: Attribution - Share Alike
- VideoLanguageSet:
- type: string
- description: language id of the video (see [/videos/languages](#operation/getLanguages))
- example: en
- VideoConstantString-Language:
- properties:
- id:
- $ref: '#/components/schemas/VideoLanguageSet'
- label:
- type: string
- example: English
- VideoPlaylistPrivacySet:
- type: integer
- enum:
- - 1
- - 2
- - 3
- description: Video playlist privacy policy (see [/video-playlists/privacies])
- 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: privacy id of the video (see [/videos/privacies](#operation/getPrivacyPolicies))
- VideoPrivacyConstant:
- properties:
- id:
- $ref: '#/components/schemas/VideoPrivacySet'
- label:
- type: string
- BlockStatus:
- properties:
- accounts:
- type: object
- additionalProperties:
- x-additionalPropertiesName: account
- type: object
- properties:
- blockedByServer:
- type: boolean
- blockedByUser:
- type: boolean
- hosts:
- type: object
- additionalProperties:
- x-additionalPropertiesName: host
- type: object
- properties:
- blockedByServer:
- type: boolean
- blockedByUser:
- type: boolean
- 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
- UserAdminFlags:
- type: integer
- enum:
- - 0
- - 1
- description: 'Admin flags for the user (None = `0`, Bypass video blocklist = `1`)'
- example: 1
- LiveVideoLatencyMode:
- type: integer
- enum:
- - 1
- - 2
- - 3
- description: 'The live latency mode (Default = `1`, High latency = `2`, Small Latency = `3`)'
- VideoStateConstant:
- properties:
- id:
- type: integer
- enum:
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- - 7
- - 8
- - 9
- description: |
- The video state:
- - `1`: Published
- - `2`: To transcode
- - `3`: To import
- - `4`: Waiting for live stream
- - `5`: Live ended
- - `6`: To move to an external storage (object storage...)
- - `7`: Transcoding failed
- - `8`: Moving to an external storage failed
- - `9`: To edit using studio edition feature
- 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]
- VideoResolutionSet:
- type: integer
- description: |
- Video resolution (`0`, `240`, `360`, `720`, `1080`, `1440` or `2160`)
- `0` is used as a special value for stillimage videos dedicated to audio, a.k.a. audio-only videos.
- example: 240
- VideoResolutionConstant:
- description: resolutions and their labels for the video
- properties:
- id:
- $ref: '#/components/schemas/VideoResolutionSet'
- 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
- avatars:
- type: array
- items:
- $ref: '#/components/schemas/ActorImage'
- VideoChannelSummary:
- properties:
- id:
- $ref: '#/components/schemas/id'
- name:
- type: string
- displayName:
- type: string
- url:
- type: string
- format: url
- host:
- type: string
- format: hostname
- avatars:
- type: array
- items:
- $ref: '#/components/schemas/ActorImage'
- PlaylistElement:
- properties:
- position:
- type: integer
- startTimestamp:
- type: integer
- format: seconds
- stopTimestamp:
- type: integer
- format: seconds
- video:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/Video'
- VideoFile:
- readOnly: true
- properties:
- id:
- $ref: '#/components/schemas/id'
- magnetUri:
- type: string
- format: uri
- description: magnet URI allowing to resolve the video via BitTorrent without a metainfo file
- pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
- resolution:
- $ref: '#/components/schemas/VideoResolutionConstant'
- size:
- type: integer
- description: Video file size in bytes
- torrentUrl:
- type: string
- description: Direct URL of the torrent file
- format: url
- torrentDownloadUrl:
- type: string
- description: URL endpoint that transfers the torrent file as an attachment (so that the browser opens a download dialog)
- format: url
- fileUrl:
- type: string
- description: Direct URL of the video
- format: url
- fileDownloadUrl:
- type: string
- description: URL endpoint that transfers the video file as an attachment (so that the browser opens a download dialog)
- format: url
- fps:
- type: number
- description: Frames per second of the video file
- metadataUrl:
- type: string
- format: url
- description: URL dereferencing the output of ffprobe on the file
- VideoStreamingPlaylists:
- allOf:
- - type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- type:
- type: integer
- enum:
- - 1
- description: |
- Playlist type:
- - `1`: HLS
- - $ref: '#/components/schemas/VideoStreamingPlaylists-HLS'
- VideoStreamingPlaylists-HLS:
- properties:
- 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:
- $ref: '#/components/schemas/Video/properties/id'
- uuid:
- $ref: '#/components/schemas/Video/properties/uuid'
- name:
- $ref: '#/components/schemas/Video/properties/name'
- Video:
- properties:
- id:
- description: object id for the video
- allOf:
- - $ref: '#/components/schemas/id'
- uuid:
- description: universal identifier for the video, that can be used across instances
- allOf:
- - $ref: '#/components/schemas/UUIDv4'
- shortUUID:
- allOf:
- - $ref: '#/components/schemas/shortUUID'
- isLive:
- type: boolean
- createdAt:
- type: string
- format: date-time
- example: 2017-10-01T10:52:46.396Z
- description: time at which the video object was first drafted
- publishedAt:
- type: string
- format: date-time
- example: 2018-10-01T10:52:46.396Z
- description: time at which the video was marked as ready for playback (with restrictions depending on `privacy`). Usually set after a `state` evolution.
- updatedAt:
- type: string
- format: date-time
- example: 2021-05-04T08:01:01.502Z
- description: last time the video's metadata was modified
- originallyPublishedAt:
- type: string
- format: date-time
- example: 2010-10-01T10:52:46.396Z
- description: used to represent a date of first publication, prior to the practical publication date of `publishedAt`
- category:
- allOf:
- - $ref: '#/components/schemas/VideoConstantNumber-Category'
- description: category in which the video is classified
- licence:
- allOf:
- - $ref: '#/components/schemas/VideoConstantNumber-Licence'
- description: licence under which the video is distributed
- language:
- allOf:
- - $ref: '#/components/schemas/VideoConstantString-Language'
- description: main language used in the video
- privacy:
- allOf:
- - $ref: '#/components/schemas/VideoPrivacyConstant'
- description: privacy policy used to distribute the video
- description:
- type: string
- example: |
- **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n
- **Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**\r\n*A decentralized video hosting network, based on fr...
- minLength: 3
- maxLength: 250
- description: |
- truncated description of the video, written in Markdown.
- Resolve `descriptionPath` to get the full description of maximum `10000` characters.
- duration:
- type: integer
- example: 1419
- format: seconds
- description: duration of the video in seconds
- isLocal:
- type: boolean
- name:
- type: string
- description: title of the video
- example: What is PeerTube?
- minLength: 3
- maxLength: 120
- 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:
- allOf:
- - $ref: '#/components/schemas/VideoStateConstant'
- description: represents the internal state of the video processing within the PeerTube instance
- 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:
- viewers:
- type: integer
- description: If the video is a live, you have the amount of current viewers
- descriptionPath:
- type: string
- example: /api/v1/videos/9c9de5e8-0a1e-484a-b099-e80766180a6d/description
- description: path at which to get the full description of maximum `10000` characters
- support:
- type: string
- description: A text tell the audience how to support the video creator
- example: Please support our work on https://soutenir.framasoft.org/en/ <3
- minLength: 3
- maxLength: 1000
- channel:
- $ref: '#/components/schemas/VideoChannel'
- account:
- $ref: '#/components/schemas/Account'
- tags:
- example: [flowers, gardening]
- type: array
- minItems: 1
- maxItems: 5
- items:
- type: string
- minLength: 2
- maxLength: 30
- commentsEnabled:
- type: boolean
- downloadEnabled:
- type: boolean
- trackerUrls:
- type: array
- items:
- type: string
- format: url
- example:
- - https://peertube2.cpy.re/tracker/announce
- - wss://peertube2.cpy.re/tracker/socket
- files:
- type: array
- items:
- $ref: '#/components/schemas/VideoFile'
- description: |
- WebTorrent/raw video files. If WebTorrent is disabled on the server:
- - field will be empty
- - video files will be found in `streamingPlaylists[].files` field
- streamingPlaylists:
- type: array
- items:
- $ref: '#/components/schemas/VideoStreamingPlaylists'
- description: |
- HLS playlists/manifest files. If HLS is disabled on the server:
- - field will be empty
- - video files will be found in `files` field
- FileRedundancyInformation:
- properties:
- id:
- $ref: '#/components/schemas/id'
- 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:
- $ref: '#/components/schemas/id'
- name:
- type: string
- url:
- type: string
- format: url
- uuid:
- $ref: '#/components/schemas/UUIDv4'
- 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
- VideoCreateImport:
- allOf:
- - type: object
- additionalProperties: false
- oneOf:
- - properties:
- targetUrl:
- $ref: '#/components/schemas/VideoImport/properties/targetUrl'
- required: [targetUrl]
- - properties:
- magnetUri:
- $ref: '#/components/schemas/VideoImport/properties/magnetUri'
- required: [magnetUri]
- - properties:
- torrentfile:
- $ref: '#/components/schemas/VideoImport/properties/torrentfile'
- required: [torrentfile]
- - $ref: '#/components/schemas/VideoUploadRequestCommon'
- required:
- - channelId
- - name
- VideoImport:
- properties:
- id:
- readOnly: true
- allOf:
- - $ref: '#/components/schemas/id'
- targetUrl:
- type: string
- format: url
- description: remote URL where to find the import's source video
- example: https://framatube.org/videos/watch/9c9de5e8-0a1e-484a-b099-e80766180a6d
- magnetUri:
- type: string
- format: uri
- description: magnet URI allowing to resolve the import's source video
- pattern: /magnet:\?xt=urn:[a-z0-9]+:[a-z0-9]{32}/i
- torrentfile:
- writeOnly: true
- type: string
- format: binary
- description: Torrent file containing only the video file
- torrentName:
- readOnly: true
- type: string
- state:
- readOnly: true
- allOf:
- - $ref: '#/components/schemas/VideoImportStateConstant'
- error:
- readOnly: true
- type: string
- createdAt:
- readOnly: true
- type: string
- format: date-time
- updatedAt:
- readOnly: true
- type: string
- format: date-time
- video:
- readOnly: true
- nullable: true
- allOf:
- - $ref: '#/components/schemas/Video'
- VideoImportsList:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/VideoImport'
- Abuse:
- properties:
- id:
- $ref: '#/components/schemas/id'
- reason:
- type: string
- example: The video is a spam
- minLength: 2
- maxLength: 3000
- 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
- minLength: 2
- maxLength: 3000
- video:
- $ref: '#/components/schemas/VideoInfo'
- createdAt:
- type: string
- format: date-time
- AbuseMessage:
- properties:
- id:
- $ref: '#/components/schemas/id'
- message:
- type: string
- minLength: 2
- maxLength: 3000
- byModerator:
- type: boolean
- createdAt:
- type: string
- format: date-time
- account:
- $ref: '#/components/schemas/AccountSummary'
- VideoBlacklist:
- properties:
- id:
- $ref: '#/components/schemas/id'
- videoId:
- $ref: '#/components/schemas/Video/properties/id'
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- name:
- type: string
- minLength: 3
- maxLength: 120
- uuid:
- $ref: '#/components/schemas/UUIDv4'
- description:
- type: string
- minLength: 3
- maxLength: 10000
- duration:
- type: integer
- views:
- type: integer
- likes:
- type: integer
- dislikes:
- type: integer
- nsfw:
- type: boolean
- VideoPlaylist:
- properties:
- id:
- $ref: '#/components/schemas/id'
- uuid:
- $ref: '#/components/schemas/UUIDv4'
- shortUUID:
- allOf:
- - $ref: '#/components/schemas/shortUUID'
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- description:
- type: string
- minLength: 3
- maxLength: 1000
- displayName:
- type: string
- minLength: 1
- maxLength: 120
- isLocal:
- type: boolean
- videoLength:
- type: integer
- minimum: 0
- 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:
- $ref: '#/components/schemas/id'
- url:
- type: string
- format: url
- text:
- type: string
- format: html
- description: Text of the comment
- minLength: 1
- example: This video is wonderful!
- threadId:
- $ref: '#/components/schemas/id'
- inReplyToCommentId:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/id'
- videoId:
- $ref: '#/components/schemas/Video/properties/id'
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- deletedAt:
- nullable: true
- type: string
- format: date-time
- default: null
- isDeleted:
- type: boolean
- default: false
- totalRepliesFromVideoAuthor:
- type: integer
- minimum: 0
- totalReplies:
- type: integer
- minimum: 0
- 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-Language'
- captionPath:
- type: string
- VideoSource:
- properties:
- filename:
- type: string
- ActorImage:
- properties:
- path:
- type: string
- width:
- type: integer
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- ActorInfo:
- properties:
- id:
- $ref: '#/components/schemas/id'
- name:
- type: string
- displayName:
- type: string
- host:
- type: string
- format: hostname
- avatars:
- type: array
- items:
- $ref: '#/components/schemas/ActorImage'
- Actor:
- properties:
- id:
- $ref: '#/components/schemas/id'
- url:
- type: string
- format: url
- name:
- description: immutable name of the actor, used to find or mention it
- allOf:
- - $ref: '#/components/schemas/username'
- host:
- type: string
- format: hostname
- description: server on which the actor is resident
- hostRedundancyAllowed:
- type: boolean
- description: whether this actor's host allows redundancy of its videos
- followingCount:
- type: integer
- minimum: 0
- description: number of actors subscribed to by this actor, as seen by this instance
- followersCount:
- type: integer
- minimum: 0
- description: number of followers of this actor, as seen by this instance
- createdAt:
- type: string
- format: date-time
- updatedAt:
- type: string
- format: date-time
- Account:
- allOf:
- - $ref: '#/components/schemas/Actor'
- - properties:
- userId:
- description: object id for the user tied to this account
- allOf:
- - $ref: '#/components/schemas/User/properties/id'
- displayName:
- type: string
- description: editable name of the account, displayed in its representations
- minLength: 3
- maxLength: 120
- description:
- type: string
- description: text or bio displayed on the account's profile
- UserViewingVideo:
- required:
- - currentTime
- properties:
- currentTime:
- type: integer
- format: seconds
- description: timestamp within the video, in seconds
- example: 5
- viewEvent:
- type: string
- enum:
- - seek
- description: >
- Event since last viewing call:
- * `seek` - If the user seeked the video
- VideoStatsOverall:
- properties:
- averageWatchTime:
- type: number
- totalWatchTime:
- type: number
- viewersPeak:
- type: number
- viewersPeakDate:
- type: string
- format: date-time
- countries:
- type: array
- items:
- type: object
- properties:
- isoCode:
- type: string
- viewers:
- type: number
- VideoStatsRetention:
- properties:
- data:
- type: array
- items:
- type: object
- properties:
- second:
- type: number
- retentionPercent:
- type: number
- VideoStatsTimeserie:
- properties:
- data:
- type: array
- items:
- type: object
- properties:
- date:
- type: string
- value:
- type: number
- 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:
- $ref: '#/components/schemas/VideoResolutionSet'
- import:
- type: object
- properties:
- videos:
- type: object
- properties:
- http:
- type: object
- properties:
- enabled:
- type: boolean
- torrent:
- type: object
- properties:
- enabled:
- type: boolean
- videoChannelSynchronization:
- 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
- example: 16810141515
- videoQuotaDaily:
- type: integer
- example: 1681014151
- 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
- homepage:
- type: object
- properties:
- enabled:
- type: boolean
- SendClientLog:
- properties:
- message:
- type: string
- url:
- type: string
- description: URL of the current user page
- level:
- enum:
- - error
- - warn
- stackTrace:
- type: string
- description: Stack trace of the error if there is one
- userAgent:
- type: string
- description: User agent of the web browser that sends the message
- meta:
- type: string
- description: Additional information regarding this log
- required:
- - message
- - url
- - level
- ServerStats:
- properties:
- totalUsers:
- type: number
- totalDailyActiveUsers:
- type: number
- totalWeeklyActiveUsers:
- type: number
- totalMonthlyActiveUsers:
- type: number
- totalLocalVideos:
- type: number
- totalLocalVideoViews:
- type: number
- description: Total video views made on the instance
- totalLocalVideoComments:
- type: number
- description: Total comments made by local users
- totalLocalVideoFilesSize:
- type: number
- totalVideos:
- type: number
- totalVideoComments:
- type: number
- totalLocalVideoChannels:
- type: number
- totalLocalDailyActiveVideoChannels:
- type: number
- totalLocalWeeklyActiveVideoChannels:
- type: number
- totalLocalMonthlyActiveVideoChannels:
- type: number
- totalLocalPlaylists:
- type: number
- totalInstanceFollowers:
- type: number
- totalInstanceFollowing:
- type: number
- videosRedundancy:
- type: array
- items:
- type: object
- properties:
- strategy:
- type: string
- totalSize:
- type: number
- totalUsed:
- type: number
- totalVideoFiles:
- type: number
- totalVideos:
- type: number
- totalActivityPubMessagesProcessed:
- type: number
- totalActivityPubMessagesSuccesses:
- type: number
- totalActivityPubMessagesErrors:
- type: number
- activityPubMessagesProcessedPerSecond:
- type: number
- totalActivityPubMessagesWaiting:
- type: number
- 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
- description: Settings that apply to new users, if registration is enabled
- properties:
- videoQuota:
- type: integer
- example: 16810141515
- videoQuotaDaily:
- type: integer
- example: 1681014151
- transcoding:
- type: object
- description: Settings pertaining to transcoding jobs
- properties:
- enabled:
- type: boolean
- allowAdditionalExtensions:
- type: boolean
- description: Allow your users to upload .mkv, .mov, .avi, .wmv, .flv, .f4v, .3g2, .3gp, .mts, m2ts, .mxf, .nut videos
- allowAudioFiles:
- type: boolean
- description: If a user uploads an audio file, PeerTube will create a video by merging the preview file and the audio file
- threads:
- type: integer
- description: Amount of threads used by ffmpeg for 1 transcoding job
- concurrency:
- type: number
- description: Amount of transcoding jobs to execute in parallel
- profile:
- type: string
- enum:
- - default
- description: |
- New profiles can be added by plugins ; available in core PeerTube: 'default'.
- resolutions:
- type: object
- description: Resolutions to transcode _new videos_ to
- properties:
- 0p:
- type: boolean
- 144p:
- type: boolean
- 240p:
- type: boolean
- 360p:
- type: boolean
- 480p:
- type: boolean
- 720p:
- type: boolean
- 1080p:
- type: boolean
- 1440p:
- type: boolean
- 2160p:
- type: boolean
- webtorrent:
- type: object
- description: WebTorrent-specific settings
- properties:
- enabled:
- type: boolean
- hls:
- type: object
- description: HLS-specific settings
- 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
- video_channel_synchronization:
- 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
- CustomHomepage:
- properties:
- content:
- type: string
- Follow:
- properties:
- id:
- $ref: '#/components/schemas/id'
- 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
- maxItems: 8
- items:
- type: string
- enum:
- - violentOrAbusive
- - hatefulOrAbusive
- - spamOrMisleading
- - privacy
- - rights
- - serverRules
- - thumbnails
- - captions
- Job:
- properties:
- id:
- $ref: '#/components/schemas/id'
- 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-stats
- - activitypub-refresher
- - video-redundancy
- - video-channel-import
- 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:
- $ref: '#/components/schemas/id'
- account:
- type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- VideoUploadRequestCommon:
- properties:
- name:
- description: Video name
- type: string
- example: What is PeerTube?
- minLength: 3
- maxLength: 120
- channelId:
- description: Channel id that will contain this video
- type: integer
- example: 3
- minimum: 1
- privacy:
- $ref: '#/components/schemas/VideoPrivacySet'
- category:
- $ref: '#/components/schemas/VideoCategorySet'
- licence:
- $ref: '#/components/schemas/VideoLicenceSet'
- language:
- $ref: '#/components/schemas/VideoLanguageSet'
- description:
- description: Video description
- type: string
- example: |
- **[Want to help to translate this video?](https://weblate.framasoft.org/projects/what-is-peertube-video/)**\r\n\r\n**Take back the control of your videos! [#JoinPeertube](https://joinpeertube.org)**
- 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 our work on https://soutenir.framasoft.org/en/ <3
- type: string
- nsfw:
- description: Whether or not this video contains sensitive content
- type: boolean
- tags:
- description: Video tags (maximum 5 tags each between 2 and 30 characters)
- type: array
- minItems: 1
- maxItems: 5
- uniqueItems: true
- example:
- - framasoft
- - peertube
- 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'
- thumbnailfile:
- description: Video thumbnail file
- type: string
- format: binary
- previewfile:
- description: Video preview file
- type: string
- format: binary
- required:
- - channelId
- - name
- VideoUploadRequestLegacy:
- allOf:
- - $ref: '#/components/schemas/VideoUploadRequestCommon'
- - type: object
- required:
- - videofile
- properties:
- videofile:
- description: Video file
- type: string
- format: binary
- VideoUploadRequestResumable:
- allOf:
- - $ref: '#/components/schemas/VideoUploadRequestCommon'
- - type: object
- required:
- - filename
- properties:
- filename:
- description: Video filename including extension
- type: string
- format: filename
- example: what_is_peertube.mp4
- thumbnailfile:
- description: Video thumbnail file
- type: string
- format: binary
- previewfile:
- description: Video preview file
- type: string
- format: binary
- VideoUploadResponse:
- properties:
- video:
- type: object
- properties:
- id:
- $ref: '#/components/schemas/Video/properties/id'
- uuid:
- $ref: '#/components/schemas/Video/properties/uuid'
- shortUUID:
- $ref: '#/components/schemas/Video/properties/shortUUID'
- CommentThreadResponse:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/VideoComment'
- CommentThreadPostResponse:
- properties:
- comment:
- $ref: '#/components/schemas/VideoComment'
- VideoTokenResponse:
- properties:
- files:
- type: object
- properties:
- token:
- type: string
- expires:
- type: string
- format: date-time
- VideoListResponse:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- maxItems: 100
- items:
- $ref: '#/components/schemas/Video'
- User:
- properties:
- account:
- $ref: '#/components/schemas/Account'
- autoPlayNextVideo:
- type: boolean
- description: Automatically start playing the upcoming video after the currently playing video
- autoPlayNextVideoPlaylist:
- type: boolean
- description: Automatically start playing the video on the playlist after the currently playing video
- autoPlayVideo:
- type: boolean
- description: Automatically start playing the video on the watch page
- blocked:
- type: boolean
- blockedReason:
- type: string
- createdAt:
- type: string
- email:
- type: string
- format: email
- description: The user email
- emailVerified:
- type: boolean
- description: Has the user confirmed their email address?
- id:
- allOf:
- - $ref: '#/components/schemas/id'
- readOnly: true
- pluginAuth:
- type: string
- description: Auth plugin to use to authenticate the user
- lastLoginDate:
- type: string
- format: date-time
- noInstanceConfigWarningModal:
- type: boolean
- noAccountSetupWarningModal:
- type: boolean
- noWelcomeModal:
- type: boolean
- nsfwPolicy:
- $ref: '#/components/schemas/NSFWPolicy'
- role:
- type: object
- properties:
- id:
- $ref: '#/components/schemas/UserRole'
- label:
- type: string
- enum:
- - User
- - Moderator
- - Administrator
- theme:
- type: string
- description: Theme enabled by this user
- username:
- $ref: '#/components/schemas/username'
- videoChannels:
- type: array
- items:
- $ref: '#/components/schemas/VideoChannel'
- videoQuota:
- type: integer
- description: The user video quota in bytes
- example: -1
- videoQuotaDaily:
- type: integer
- description: The user daily video quota in bytes
- example: -1
- p2pEnabled:
- type: boolean
- description: Enable P2P in the player
- UserWithStats:
- allOf:
- - $ref: '#/components/schemas/User'
- - properties:
- # optionally present fields: they require WITH_STATS scope
- videosCount:
- type: integer
- description: Count of videos published
- abusesCount:
- type: integer
- description: Count of reports/abuses of which the user is a target
- abusesAcceptedCount:
- type: integer
- description: Count of reports/abuses created by the user and accepted/acted upon by the moderation team
- abusesCreatedCount:
- type: integer
- description: Count of reports/abuses created by the user
- videoCommentsCount:
- type: integer
- description: Count of comments published
- AddUser:
- properties:
- username:
- $ref: '#/components/schemas/username'
- password:
- $ref: '#/components/schemas/password'
- email:
- type: string
- format: email
- description: The user email
- videoQuota:
- type: integer
- description: The user video quota in bytes
- example: -1
- videoQuotaDaily:
- type: integer
- description: The user daily video quota in bytes
- example: -1
- channelName:
- $ref: '#/components/schemas/usernameChannel'
- role:
- $ref: '#/components/schemas/UserRole'
- adminFlags:
- $ref: '#/components/schemas/UserAdminFlags'
- required:
- - username
- - password
- - email
- - videoQuota
- - videoQuotaDaily
- - role
- UpdateUser:
- properties:
- email:
- description: The updated email of the user
- allOf:
- - $ref: '#/components/schemas/User/properties/email'
- emailVerified:
- type: boolean
- description: Set the email as verified
- videoQuota:
- type: integer
- description: The updated video quota of the user in bytes
- videoQuotaDaily:
- type: integer
- description: The updated daily video quota of the user in bytes
- pluginAuth:
- type: string
- nullable: true
- description: The auth plugin to use to authenticate the user
- example: 'peertube-plugin-auth-saml2'
- role:
- $ref: '#/components/schemas/UserRole'
- adminFlags:
- $ref: '#/components/schemas/UserAdminFlags'
- password:
- $ref: '#/components/schemas/password'
- UpdateMe:
- # see shared/models/users/user-update-me.model.ts:
- properties:
- password:
- $ref: '#/components/schemas/password'
- currentPassword:
- $ref: '#/components/schemas/password'
- email:
- description: new email used for login and service communications
- allOf:
- - $ref: '#/components/schemas/User/properties/email'
- displayName:
- type: string
- description: new name of the user in its representations
- minLength: 3
- maxLength: 120
- displayNSFW:
- type: string
- description: new NSFW display policy
- enum:
- - 'true'
- - 'false'
- - both
- p2pEnabled:
- type: boolean
- description: whether to enable P2P in the player or not
- autoPlayVideo:
- type: boolean
- description: new preference regarding playing videos automatically
- autoPlayNextVideo:
- type: boolean
- description: new preference regarding playing following videos automatically
- autoPlayNextVideoPlaylist:
- type: boolean
- description: new preference regarding playing following playlist videos automatically
- videosHistoryEnabled:
- type: boolean
- description: whether to keep track of watched history or not
- videoLanguages:
- type: array
- items:
- type: string
- description: list of languages to filter videos down to
- theme:
- type: string
- noInstanceConfigWarningModal:
- type: boolean
- noAccountSetupWarningModal:
- type: boolean
- noWelcomeModal:
- type: boolean
- GetMeVideoRating:
- properties:
- id:
- $ref: '#/components/schemas/id'
- rating:
- type: string
- enum:
- - like
- - dislike
- - none
- description: Rating of the video
- required:
- - id
- - rating
- VideoRating:
- properties:
- video:
- $ref: '#/components/schemas/Video'
- rating:
- type: string
- enum:
- - like
- - dislike
- - none
- description: Rating of the video
- required:
- - video
- - rating
- RegisterUser:
- properties:
- username:
- description: immutable name of the user, used to find or mention its actor
- allOf:
- - $ref: '#/components/schemas/username'
- password:
- $ref: '#/components/schemas/password'
- email:
- type: string
- format: email
- description: email of the user, used for login or service communications
- displayName:
- type: string
- description: editable name of the user, displayed in its representations
- minLength: 1
- maxLength: 120
- channel:
- type: object
- description: channel base information used to create the first channel of the user
- properties:
- name:
- $ref: '#/components/schemas/usernameChannel'
- displayName:
- type: string
- required:
- - username
- - password
- - email
- OAuthClient:
- properties:
- client_id:
- type: string
- pattern: /^[a-z0-9]$/
- maxLength: 32
- minLength: 32
- example: v1ikx5hnfop4mdpnci8nsqh93c45rldf
- client_secret:
- type: string
- pattern: /^[a-zA-Z0-9]$/
- maxLength: 32
- minLength: 32
- example: AjWiOapPltI6EnsWQwlFarRtLh4u8tDt
- OAuthToken-password:
- allOf:
- - $ref: '#/components/schemas/OAuthClient'
- - type: object
- properties:
- grant_type:
- type: string
- enum:
- - password
- - refresh_token
- default: password
- username:
- $ref: '#/components/schemas/User/properties/username'
- password:
- $ref: '#/components/schemas/password'
- required:
- - client_id
- - client_secret
- - grant_type
- - username
- - password
- OAuthToken-refresh_token:
- allOf:
- - $ref: '#/components/schemas/OAuthClient'
- - type: object
- properties:
- grant_type:
- type: string
- enum:
- - password
- - refresh_token
- default: password
- refresh_token:
- type: string
- example: 2e0d675df9fc96d2e4ec8a3ebbbf45eca9137bb7
- required:
- - client_id
- - client_secret
- - grant_type
- - refresh_token
- VideoChannel:
- allOf:
- - $ref: '#/components/schemas/Actor'
- - type: object
- properties:
- displayName:
- type: string
- description: editable name of the channel, displayed in its representations
- example: Videos of Framasoft
- minLength: 1
- maxLength: 120
- description:
- type: string
- example: Videos made with <3 by Framasoft
- minLength: 3
- maxLength: 1000
- support:
- type: string
- description: text shown by default on all videos of this channel, to tell the audience how to support it
- example: Please support our work on https://soutenir.framasoft.org/en/ <3
- minLength: 3
- maxLength: 1000
- isLocal:
- readOnly: true
- type: boolean
- updatedAt:
- readOnly: true
- type: string
- format: date-time
- banners:
- type: array
- items:
- $ref: '#/components/schemas/ActorImage'
- ownerAccount:
- readOnly: true
- nullable: true
- type: object
- properties:
- id:
- type: integer
- uuid:
- $ref: '#/components/schemas/UUIDv4'
- VideoChannelCreate:
- allOf:
- - $ref: '#/components/schemas/VideoChannel'
- - properties:
- name:
- description: username of the channel to create
- allOf:
- - $ref: '#/components/schemas/usernameChannel'
- required:
- - name
- - displayName
- VideoChannelUpdate:
- allOf:
- - $ref: '#/components/schemas/VideoChannel'
- - properties:
- bulkVideosSupportUpdate:
- type: boolean
- description: Update the support field for all videos of this channel
- VideoChannelList:
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- allOf:
- - $ref: '#/components/schemas/VideoChannel'
- - $ref: '#/components/schemas/Actor'
- ImportVideosInChannelCreate:
- type: object
- properties:
- externalChannelUrl:
- type: string
- example: https://youtube.com/c/UC_myfancychannel
- videoChannelSyncId:
- type: integer
- description: If part of a channel sync process, specify its id to assign video imports to this channel synchronization
- required:
- - 'externalChannelUrl'
- VideoChannelSync:
- type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- state:
- type: object
- properties:
- id:
- type: integer
- example: 2
- label:
- type: string
- example: PROCESSING
- externalChannelUrl:
- type: string
- example: 'https://youtube.com/c/UC_myfancychannel'
- createdAt:
- type: string
- format: date-time
- lastSyncAt:
- type: string
- format: date-time
- nullable: true
- channel:
- $ref: '#/components/schemas/VideoChannel'
- VideoChannelSyncList:
- type: object
- properties:
- total:
- type: integer
- example: 1
- data:
- type: array
- items:
- allOf:
- - $ref: '#/components/schemas/VideoChannelSync'
- VideoChannelSyncCreate:
- type: object
- properties:
- externalChannelUrl:
- type: string
- example: https://youtube.com/c/UC_myfancychannel
- videoChannelId:
- $ref: '#/components/schemas/id'
- 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
- - 2
- Notification:
- properties:
- id:
- $ref: '#/components/schemas/id'
- 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
- - `15` ABUSE_STATE_CHANGE
- - `16` ABUSE_NEW_MESSAGE
- - `17` NEW_PLUGIN_VERSION
- - `18` NEW_PEERTUBE_VERSION
- 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:
- $ref: '#/components/schemas/id'
- video:
- nullable: true
- $ref: '#/components/schemas/VideoInfo'
- torrentName:
- type: string
- nullable: true
- magnetUri:
- $ref: '#/components/schemas/VideoImport/properties/magnetUri'
- targetUri:
- type: string
- format: uri
- nullable: true
- comment:
- nullable: true
- type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- threadId:
- type: integer
- video:
- $ref: '#/components/schemas/VideoInfo'
- account:
- $ref: '#/components/schemas/ActorInfo'
- videoAbuse:
- nullable: true
- type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- video:
- allOf:
- - $ref: '#/components/schemas/VideoInfo'
- videoBlacklist:
- nullable: true
- type: object
- properties:
- id:
- $ref: '#/components/schemas/id'
- video:
- allOf:
- - $ref: '#/components/schemas/VideoInfo'
- account:
- nullable: true
- allOf:
- - $ref: '#/components/schemas/ActorInfo'
- actorFollow:
- type: object
- nullable: true
- properties:
- id:
- $ref: '#/components/schemas/id'
- 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
- latencyMode:
- description: User can select live latency mode if enabled by the instance
- $ref: '#/components/schemas/LiveVideoLatencyMode'
- LiveVideoResponse:
- properties:
- rtmpUrl:
- type: string
- description: Included in the response if an appropriate token is provided
- rtmpsUrl:
- type: string
- description: Included in the response if an appropriate token is provided
- streamKey:
- type: string
- description: RTMP stream key to use to stream into this live video. Included in the response if an appropriate token is provided
- saveReplay:
- type: boolean
- permanentLive:
- description: User can stream multiple times in a permanent live
- type: boolean
- latencyMode:
- description: User can select live latency mode if enabled by the instance
- $ref: '#/components/schemas/LiveVideoLatencyMode'
- RequestTwoFactorResponse:
- properties:
- otpRequest:
- type: object
- properties:
- requestToken:
- type: string
- description: The token to send to confirm this request
- secret:
- type: string
- description: The OTP secret
- uri:
- type: string
- description: The OTP URI
- VideoStudioCreateTask:
- type: array
- items:
- anyOf:
- -
- title: cut
- type: object
- properties:
- name:
- type: string
- enum:
- - 'cut'
- options:
- type: object
- properties:
- start:
- type: integer
- end:
- type: integer
- -
- title: add-intro
- type: object
- properties:
- name:
- type: string
- enum:
- - 'add-intro'
- options:
- type: object
- properties:
- file:
- type: string
- format: binary
- -
- title: add-outro
- type: object
- properties:
- name:
- type: string
- enum:
- - 'add-outro'
- options:
- type: object
- properties:
- file:
- type: string
- format: binary
- -
- title: add-watermark
- type: object
- properties:
- name:
- type: string
- enum:
- - 'add-watermark'
- options:
- type: object
- properties:
- file:
- type: string
- format: binary
- LiveVideoSessionResponse:
- properties:
- id:
- type: integer
- startDate:
- type: string
- format: date-time
- description: Start date of the live session
- endDate:
- type: string
- format: date-time
- nullable: true
- description: End date of the live session
- error:
- type: integer
- enum:
- - 1
- - 2
- - 3
- - 4
- - 5
- nullable: true
- description: >
- Error type if an error occurred during the live session:
- - `1`: Bad socket health (transcoding is too slow)
- - `2`: Max duration exceeded
- - `3`: Quota exceeded
- - `4`: Quota FFmpeg error
- - `5`: Video has been blacklisted during the live
- replayVideo:
- type: object
- description: Video replay information
- properties:
- id:
- type: number
- uuid:
- $ref: '#/components/schemas/UUIDv4'
- shortUUID:
- $ref: '#/components/schemas/shortUUID'
- PlaybackMetricCreate:
- properties:
- playerMode:
- type: string
- enum:
- - 'p2p-media-loader'
- - 'webtorrent'
- resolution:
- type: number
- description: Current player video resolution
- fps:
- type: number
- description: Current player video fps
- resolutionChanges:
- type: number
- description: How many resolution changes occured since the last metric creation
- errors:
- type: number
- description: How many errors occured since the last metric creation
- downloadedBytesP2P:
- type: number
- description: How many bytes were downloaded with P2P since the last metric creation
- downloadedBytesHTTP:
- type: number
- description: How many bytes were downloaded with HTTP since the last metric creation
- uploadedBytesP2P:
- type: number
- description: How many bytes were uploaded with P2P since the last metric creation
- videoId:
- oneOf:
- - $ref: '#/components/schemas/id'
- - $ref: '#/components/schemas/UUIDv4'
- - $ref: '#/components/schemas/shortUUID'
- required:
- - playerMode
- - resolutionChanges
- - errors
- - downloadedBytesP2P
- - downloadedBytesHTTP
- - uploadedBytesP2P
- - videoId
- 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'
|