Something went wrong. Try again.
A decentralized music tracking and discovery platform built on AT Protocol 🎵 rocksky.app
Something went wrong. Try again.
493 kB · 16770 lines
JSON
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059606060616062606360646065606660676068606960706071607260736074607560766077607860796080608160826083608460856086608760886089609060916092609360946095609660976098609961006101610261036104610561066107610861096110611161126113611461156116611761186119612061216122612361246125612661276128612961306131613261336134613561366137613861396140614161426143614461456146614761486149615061516152615361546155615661576158615961606161616261636164616561666167616861696170617161726173617461756176617761786179618061816182618361846185618661876188618961906191619261936194619561966197619861996200620162026203620462056206620762086209621062116212621362146215621662176218621962206221622262236224622562266227622862296230623162326233623462356236623762386239624062416242624362446245624662476248624962506251625262536254625562566257625862596260626162626263626462656266626762686269627062716272627362746275627662776278627962806281628262836284628562866287628862896290629162926293629462956296629762986299630063016302630363046305630663076308630963106311631263136314631563166317631863196320632163226323632463256326632763286329633063316332633363346335633663376338633963406341634263436344634563466347634863496350635163526353635463556356635763586359636063616362636363646365636663676368636963706371637263736374637563766377637863796380638163826383638463856386638763886389639063916392639363946395639663976398639964006401640264036404640564066407640864096410641164126413641464156416641764186419642064216422642364246425642664276428642964306431643264336434643564366437643864396440644164426443644464456446644764486449645064516452645364546455645664576458645964606461646264636464646564666467646864696470647164726473647464756476647764786479648064816482648364846485648664876488648964906491649264936494649564966497649864996500650165026503650465056506650765086509651065116512651365146515651665176518651965206521652265236524652565266527652865296530653165326533653465356536653765386539654065416542654365446545654665476548654965506551655265536554655565566557655865596560656165626563656465656566656765686569657065716572657365746575657665776578657965806581658265836584658565866587658865896590659165926593659465956596659765986599660066016602660366046605660666076608660966106611661266136614661566166617661866196620662166226623662466256626662766286629663066316632663366346635663666376638663966406641664266436644664566466647664866496650665166526653665466556656665766586659666066616662666366646665666666676668666966706671667266736674667566766677667866796680668166826683668466856686668766886689669066916692669366946695669666976698669967006701670267036704670567066707670867096710671167126713671467156716671767186719672067216722672367246725672667276728672967306731673267336734673567366737673867396740674167426743674467456746674767486749675067516752675367546755675667576758675967606761676267636764676567666767676867696770677167726773677467756776677767786779678067816782678367846785678667876788678967906791679267936794679567966797679867996800680168026803680468056806680768086809681068116812681368146815681668176818681968206821682268236824682568266827682868296830683168326833683468356836683768386839684068416842684368446845684668476848684968506851685268536854685568566857685868596860686168626863686468656866686768686869687068716872687368746875687668776878687968806881688268836884688568866887688868896890689168926893689468956896689768986899690069016902690369046905690669076908690969106911691269136914691569166917691869196920692169226923692469256926692769286929693069316932693369346935693669376938693969406941694269436944694569466947694869496950695169526953695469556956695769586959696069616962696369646965696669676968696969706971697269736974697569766977697869796980698169826983698469856986698769886989699069916992699369946995699669976998699970007001700270037004700570067007700870097010701170127013701470157016701770187019702070217022702370247025702670277028702970307031703270337034703570367037703870397040704170427043704470457046704770487049705070517052705370547055705670577058705970607061706270637064706570667067706870697070707170727073707470757076707770787079708070817082708370847085708670877088708970907091709270937094709570967097709870997100710171027103710471057106710771087109711071117112711371147115711671177118711971207121712271237124712571267127712871297130713171327133713471357136713771387139714071417142714371447145714671477148714971507151715271537154715571567157715871597160716171627163716471657166716771687169717071717172717371747175717671777178717971807181718271837184718571867187718871897190719171927193719471957196719771987199720072017202720372047205720672077208720972107211721272137214721572167217721872197220722172227223722472257226722772287229723072317232723372347235723672377238723972407241724272437244724572467247724872497250725172527253725472557256725772587259726072617262726372647265726672677268726972707271727272737274727572767277727872797280728172827283728472857286728772887289729072917292729372947295729672977298729973007301730273037304730573067307730873097310731173127313731473157316731773187319732073217322732373247325732673277328732973307331733273337334733573367337733873397340734173427343734473457346734773487349735073517352735373547355735673577358735973607361736273637364736573667367736873697370737173727373737473757376737773787379738073817382738373847385738673877388738973907391739273937394739573967397739873997400740174027403740474057406740774087409741074117412741374147415741674177418741974207421742274237424742574267427742874297430743174327433743474357436743774387439744074417442744374447445744674477448744974507451745274537454745574567457745874597460746174627463746474657466746774687469747074717472747374747475747674777478747974807481748274837484748574867487748874897490749174927493749474957496749774987499750075017502750375047505750675077508750975107511751275137514751575167517751875197520752175227523752475257526752775287529753075317532753375347535753675377538753975407541754275437544754575467547754875497550755175527553755475557556755775587559756075617562756375647565756675677568756975707571757275737574757575767577757875797580758175827583758475857586758775887589759075917592759375947595759675977598759976007601760276037604760576067607760876097610761176127613761476157616761776187619762076217622762376247625762676277628762976307631763276337634763576367637763876397640764176427643764476457646764776487649765076517652765376547655765676577658765976607661766276637664766576667667766876697670767176727673767476757676767776787679768076817682768376847685768676877688768976907691769276937694769576967697769876997700770177027703770477057706770777087709771077117712771377147715771677177718771977207721772277237724772577267727772877297730773177327733773477357736773777387739774077417742774377447745774677477748774977507751775277537754775577567757775877597760776177627763776477657766776777687769777077717772777377747775777677777778777977807781778277837784778577867787778877897790779177927793779477957796779777987799780078017802780378047805780678077808780978107811781278137814781578167817781878197820782178227823782478257826782778287829783078317832783378347835783678377838783978407841784278437844784578467847784878497850785178527853785478557856785778587859786078617862786378647865786678677868786978707871787278737874787578767877787878797880788178827883788478857886788778887889789078917892789378947895789678977898789979007901790279037904790579067907790879097910791179127913791479157916791779187919792079217922792379247925792679277928792979307931793279337934793579367937793879397940794179427943794479457946794779487949795079517952795379547955795679577958795979607961796279637964796579667967796879697970797179727973797479757976797779787979798079817982798379847985798679877988798979907991799279937994799579967997799879998000800180028003800480058006800780088009801080118012801380148015801680178018801980208021802280238024802580268027802880298030803180328033803480358036803780388039804080418042804380448045804680478048804980508051805280538054805580568057805880598060806180628063806480658066806780688069807080718072807380748075807680778078807980808081808280838084808580868087808880898090809180928093809480958096809780988099810081018102810381048105810681078108810981108111811281138114811581168117811881198120812181228123812481258126812781288129813081318132813381348135813681378138813981408141814281438144814581468147814881498150815181528153815481558156815781588159816081618162816381648165816681678168816981708171817281738174817581768177817881798180818181828183818481858186818781888189819081918192819381948195819681978198819982008201820282038204820582068207820882098210821182128213821482158216821782188219822082218222822382248225822682278228822982308231823282338234823582368237823882398240824182428243824482458246824782488249825082518252825382548255825682578258825982608261826282638264826582668267826882698270827182728273827482758276827782788279828082818282828382848285828682878288828982908291829282938294829582968297829882998300830183028303830483058306830783088309831083118312831383148315831683178318831983208321832283238324832583268327832883298330833183328333833483358336833783388339834083418342834383448345834683478348834983508351835283538354835583568357835883598360836183628363836483658366836783688369837083718372837383748375837683778378837983808381838283838384838583868387838883898390839183928393839483958396839783988399840084018402840384048405840684078408840984108411841284138414841584168417841884198420842184228423842484258426842784288429843084318432843384348435843684378438843984408441844284438444844584468447844884498450845184528453845484558456845784588459846084618462846384648465846684678468846984708471847284738474847584768477847884798480848184828483848484858486848784888489849084918492849384948495849684978498849985008501850285038504850585068507850885098510851185128513851485158516851785188519852085218522852385248525852685278528852985308531853285338534853585368537853885398540854185428543854485458546854785488549855085518552855385548555855685578558855985608561856285638564856585668567856885698570857185728573857485758576857785788579858085818582858385848585858685878588858985908591859285938594859585968597859885998600860186028603860486058606860786088609861086118612861386148615861686178618861986208621862286238624862586268627862886298630863186328633863486358636863786388639864086418642864386448645864686478648864986508651865286538654865586568657865886598660866186628663866486658666866786688669867086718672867386748675867686778678867986808681868286838684868586868687868886898690869186928693869486958696869786988699870087018702870387048705870687078708870987108711871287138714871587168717871887198720872187228723872487258726872787288729873087318732873387348735873687378738873987408741874287438744874587468747874887498750875187528753875487558756875787588759876087618762876387648765876687678768876987708771877287738774877587768777877887798780878187828783878487858786878787888789879087918792879387948795879687978798879988008801880288038804880588068807880888098810881188128813881488158816881788188819882088218822882388248825882688278828882988308831883288338834883588368837883888398840884188428843884488458846884788488849885088518852885388548855885688578858885988608861886288638864886588668867886888698870887188728873887488758876887788788879888088818882888388848885888688878888888988908891889288938894889588968897889888998900890189028903890489058906890789088909891089118912891389148915891689178918891989208921892289238924892589268927892889298930893189328933893489358936893789388939894089418942894389448945894689478948894989508951895289538954895589568957895889598960896189628963896489658966896789688969897089718972897389748975897689778978897989808981898289838984898589868987898889898990899189928993899489958996899789988999900090019002900390049005900690079008900990109011901290139014901590169017901890199020902190229023902490259026902790289029903090319032903390349035903690379038903990409041904290439044904590469047904890499050905190529053905490559056905790589059906090619062906390649065906690679068906990709071907290739074907590769077907890799080908190829083908490859086908790889089909090919092909390949095909690979098909991009101910291039104910591069107910891099110911191129113911491159116911791189119912091219122912391249125912691279128912991309131913291339134913591369137913891399140914191429143914491459146914791489149915091519152915391549155915691579158915991609161916291639164916591669167916891699170917191729173917491759176917791789179918091819182918391849185918691879188918991909191919291939194919591969197919891999200920192029203920492059206920792089209921092119212921392149215921692179218921992209221922292239224922592269227922892299230923192329233923492359236923792389239924092419242924392449245924692479248924992509251925292539254925592569257925892599260926192629263926492659266926792689269927092719272927392749275927692779278927992809281928292839284928592869287928892899290929192929293929492959296929792989299930093019302930393049305930693079308930993109311931293139314931593169317931893199320932193229323932493259326932793289329933093319332933393349335933693379338933993409341934293439344934593469347934893499350935193529353935493559356935793589359936093619362936393649365936693679368936993709371937293739374937593769377937893799380938193829383938493859386938793889389939093919392939393949395939693979398939994009401940294039404940594069407940894099410941194129413941494159416941794189419942094219422942394249425942694279428942994309431943294339434943594369437943894399440944194429443944494459446944794489449945094519452945394549455945694579458945994609461946294639464946594669467946894699470947194729473947494759476947794789479948094819482948394849485948694879488948994909491949294939494949594969497949894999500950195029503950495059506950795089509951095119512951395149515951695179518951995209521952295239524952595269527952895299530953195329533953495359536953795389539954095419542954395449545954695479548954995509551955295539554955595569557955895599560956195629563956495659566956795689569957095719572957395749575957695779578957995809581958295839584958595869587958895899590959195929593959495959596959795989599960096019602960396049605960696079608960996109611961296139614961596169617961896199620962196229623962496259626962796289629963096319632963396349635963696379638963996409641964296439644964596469647964896499650965196529653965496559656965796589659966096619662966396649665966696679668966996709671967296739674967596769677967896799680968196829683968496859686968796889689969096919692969396949695969696979698969997009701970297039704970597069707970897099710971197129713971497159716971797189719972097219722972397249725972697279728972997309731973297339734973597369737973897399740974197429743974497459746974797489749975097519752975397549755975697579758975997609761976297639764976597669767976897699770977197729773977497759776977797789779978097819782978397849785978697879788978997909791979297939794979597969797979897999800980198029803980498059806980798089809981098119812981398149815981698179818981998209821982298239824982598269827982898299830983198329833983498359836983798389839984098419842984398449845984698479848984998509851985298539854985598569857985898599860986198629863986498659866986798689869987098719872987398749875987698779878987998809881988298839884988598869887988898899890989198929893989498959896989798989899990099019902990399049905990699079908990999109911991299139914991599169917991899199920992199229923992499259926992799289929993099319932993399349935993699379938993999409941994299439944994599469947994899499950995199529953995499559956995799589959996099619962996399649965996699679968996999709971997299739974997599769977997899799980998199829983998499859986998799889989999099919992999399949995999699979998999910000100011000210003100041000510006100071000810009100101001110012100131001410015100161001710018100191002010021100221002310024100251002610027100281002910030100311003210033100341003510036100371003810039100401004110042100431004410045100461004710048100491005010051100521005310054100551005610057100581005910060100611006210063100641006510066100671006810069100701007110072100731007410075100761007710078100791008010081100821008310084100851008610087100881008910090100911009210093100941009510096100971009810099101001010110102101031010410105101061010710108101091011010111101121011310114101151011610117101181011910120101211012210123101241012510126101271012810129101301013110132101331013410135101361013710138101391014010141101421014310144101451014610147101481014910150101511015210153101541015510156101571015810159101601016110162101631016410165101661016710168101691017010171101721017310174101751017610177101781017910180101811018210183101841018510186101871018810189101901019110192101931019410195101961019710198101991020010201102021020310204102051020610207102081020910210102111021210213102141021510216102171021810219102201022110222102231022410225102261022710228102291023010231102321023310234102351023610237102381023910240102411024210243102441024510246102471024810249102501025110252102531025410255102561025710258102591026010261102621026310264102651026610267102681026910270102711027210273102741027510276102771027810279102801028110282102831028410285102861028710288102891029010291102921029310294102951029610297102981029910300103011030210303103041030510306103071030810309103101031110312103131031410315103161031710318103191032010321103221032310324103251032610327103281032910330103311033210333103341033510336103371033810339103401034110342103431034410345103461034710348103491035010351103521035310354103551035610357103581035910360103611036210363103641036510366103671036810369103701037110372103731037410375103761037710378103791038010381103821038310384103851038610387103881038910390103911039210393103941039510396103971039810399104001040110402104031040410405104061040710408104091041010411104121041310414104151041610417104181041910420104211042210423104241042510426104271042810429104301043110432104331043410435104361043710438104391044010441104421044310444104451044610447104481044910450104511045210453104541045510456104571045810459104601046110462104631046410465104661046710468104691047010471104721047310474104751047610477104781047910480104811048210483104841048510486104871048810489104901049110492104931049410495104961049710498104991050010501105021050310504105051050610507105081050910510105111051210513105141051510516105171051810519105201052110522105231052410525105261052710528105291053010531105321053310534105351053610537105381053910540105411054210543105441054510546105471054810549105501055110552105531055410555105561055710558105591056010561105621056310564105651056610567105681056910570105711057210573105741057510576105771057810579105801058110582105831058410585105861058710588105891059010591105921059310594105951059610597105981059910600106011060210603106041060510606106071060810609106101061110612106131061410615106161061710618106191062010621106221062310624106251062610627106281062910630106311063210633106341063510636106371063810639106401064110642106431064410645106461064710648106491065010651106521065310654106551065610657106581065910660106611066210663106641066510666106671066810669106701067110672106731067410675106761067710678106791068010681106821068310684106851068610687106881068910690106911069210693106941069510696106971069810699107001070110702107031070410705107061070710708107091071010711107121071310714107151071610717107181071910720107211072210723107241072510726107271072810729107301073110732107331073410735107361073710738107391074010741107421074310744107451074610747107481074910750107511075210753107541075510756107571075810759107601076110762107631076410765107661076710768107691077010771107721077310774107751077610777107781077910780107811078210783107841078510786107871078810789107901079110792107931079410795107961079710798107991080010801108021080310804108051080610807108081080910810108111081210813108141081510816108171081810819108201082110822108231082410825108261082710828108291083010831108321083310834108351083610837108381083910840108411084210843108441084510846108471084810849108501085110852108531085410855108561085710858108591086010861108621086310864108651086610867108681086910870108711087210873108741087510876108771087810879108801088110882108831088410885108861088710888108891089010891108921089310894108951089610897108981089910900109011090210903109041090510906109071090810909109101091110912109131091410915109161091710918109191092010921109221092310924109251092610927109281092910930109311093210933109341093510936109371093810939109401094110942109431094410945109461094710948109491095010951109521095310954109551095610957109581095910960109611096210963109641096510966109671096810969109701097110972109731097410975109761097710978109791098010981109821098310984109851098610987109881098910990109911099210993109941099510996109971099810999110001100111002110031100411005110061100711008110091101011011110121101311014110151101611017110181101911020110211102211023110241102511026110271102811029110301103111032110331103411035110361103711038110391104011041110421104311044110451104611047110481104911050110511105211053110541105511056110571105811059110601106111062110631106411065110661106711068110691107011071110721107311074110751107611077110781107911080110811108211083110841108511086110871108811089110901109111092110931109411095110961109711098110991110011101111021110311104111051110611107111081110911110111111111211113111141111511116111171111811119111201112111122111231112411125111261112711128111291113011131111321113311134111351113611137111381113911140111411114211143111441114511146111471114811149111501115111152111531115411155111561115711158111591116011161111621116311164111651116611167111681116911170111711117211173111741117511176111771117811179111801118111182111831118411185111861118711188111891119011191111921119311194111951119611197111981119911200112011120211203112041120511206112071120811209112101121111212112131121411215112161121711218112191122011221112221122311224112251122611227112281122911230112311123211233112341123511236112371123811239112401124111242112431124411245112461124711248112491125011251112521125311254112551125611257112581125911260112611126211263112641126511266112671126811269112701127111272112731127411275112761127711278112791128011281112821128311284112851128611287112881128911290112911129211293112941129511296112971129811299113001130111302113031130411305113061130711308113091131011311113121131311314113151131611317113181131911320113211132211323113241132511326113271132811329113301133111332113331133411335113361133711338113391134011341113421134311344113451134611347113481134911350113511135211353113541135511356113571135811359113601136111362113631136411365113661136711368113691137011371113721137311374113751137611377113781137911380113811138211383113841138511386113871138811389113901139111392113931139411395113961139711398113991140011401114021140311404114051140611407114081140911410114111141211413114141141511416114171141811419114201142111422114231142411425114261142711428114291143011431114321143311434114351143611437114381143911440114411144211443114441144511446114471144811449114501145111452114531145411455114561145711458114591146011461114621146311464114651146611467114681146911470114711147211473114741147511476114771147811479114801148111482114831148411485114861148711488114891149011491114921149311494114951149611497114981149911500115011150211503115041150511506115071150811509115101151111512115131151411515115161151711518115191152011521115221152311524115251152611527115281152911530115311153211533115341153511536115371153811539115401154111542115431154411545115461154711548115491155011551115521155311554115551155611557115581155911560115611156211563115641156511566115671156811569115701157111572115731157411575115761157711578115791158011581115821158311584115851158611587115881158911590115911159211593115941159511596115971159811599116001160111602116031160411605116061160711608116091161011611116121161311614116151161611617116181161911620116211162211623116241162511626116271162811629116301163111632116331163411635116361163711638116391164011641116421164311644116451164611647116481164911650116511165211653116541165511656116571165811659116601166111662116631166411665116661166711668116691167011671116721167311674116751167611677116781167911680116811168211683116841168511686116871168811689116901169111692116931169411695116961169711698116991170011701117021170311704117051170611707117081170911710117111171211713117141171511716117171171811719117201172111722117231172411725117261172711728117291173011731117321173311734117351173611737117381173911740117411174211743117441174511746117471174811749117501175111752117531175411755117561175711758117591176011761117621176311764117651176611767117681176911770117711177211773117741177511776117771177811779117801178111782117831178411785117861178711788117891179011791117921179311794117951179611797117981179911800118011180211803118041180511806118071180811809118101181111812118131181411815118161181711818118191182011821118221182311824118251182611827118281182911830118311183211833118341183511836118371183811839118401184111842118431184411845118461184711848118491185011851118521185311854118551185611857118581185911860118611186211863118641186511866118671186811869118701187111872118731187411875118761187711878118791188011881118821188311884118851188611887118881188911890118911189211893118941189511896118971189811899119001190111902119031190411905119061190711908119091191011911119121191311914119151191611917119181191911920119211192211923119241192511926119271192811929119301193111932119331193411935119361193711938119391194011941119421194311944119451194611947119481194911950119511195211953119541195511956119571195811959119601196111962119631196411965119661196711968119691197011971119721197311974119751197611977119781197911980119811198211983119841198511986119871198811989119901199111992119931199411995119961199711998119991200012001120021200312004120051200612007120081200912010120111201212013120141201512016120171201812019120201202112022120231202412025120261202712028120291203012031120321203312034120351203612037120381203912040120411204212043120441204512046120471204812049120501205112052120531205412055120561205712058120591206012061120621206312064120651206612067120681206912070120711207212073120741207512076120771207812079120801208112082120831208412085120861208712088120891209012091120921209312094120951209612097120981209912100121011210212103121041210512106121071210812109121101211112112121131211412115121161211712118121191212012121121221212312124121251212612127121281212912130121311213212133121341213512136121371213812139121401214112142121431214412145121461214712148121491215012151121521215312154121551215612157121581215912160121611216212163121641216512166121671216812169121701217112172121731217412175121761217712178121791218012181121821218312184121851218612187121881218912190121911219212193121941219512196121971219812199122001220112202122031220412205122061220712208122091221012211122121221312214122151221612217122181221912220122211222212223122241222512226122271222812229122301223112232122331223412235122361223712238122391224012241122421224312244122451224612247122481224912250122511225212253122541225512256122571225812259122601226112262122631226412265122661226712268122691227012271122721227312274122751227612277122781227912280122811228212283122841228512286122871228812289122901229112292122931229412295122961229712298122991230012301123021230312304123051230612307123081230912310123111231212313123141231512316123171231812319123201232112322123231232412325123261232712328123291233012331123321233312334123351233612337123381233912340123411234212343123441234512346123471234812349123501235112352123531235412355123561235712358123591236012361123621236312364123651236612367123681236912370123711237212373123741237512376123771237812379123801238112382123831238412385123861238712388123891239012391123921239312394123951239612397123981239912400124011240212403124041240512406124071240812409124101241112412124131241412415124161241712418124191242012421124221242312424124251242612427124281242912430124311243212433124341243512436124371243812439124401244112442124431244412445124461244712448124491245012451124521245312454124551245612457124581245912460124611246212463124641246512466124671246812469124701247112472124731247412475124761247712478124791248012481124821248312484124851248612487124881248912490124911249212493124941249512496124971249812499125001250112502125031250412505125061250712508125091251012511125121251312514125151251612517125181251912520125211252212523125241252512526125271252812529125301253112532125331253412535125361253712538125391254012541125421254312544125451254612547125481254912550125511255212553125541255512556125571255812559125601256112562125631256412565125661256712568125691257012571125721257312574125751257612577125781257912580125811258212583125841258512586125871258812589125901259112592125931259412595125961259712598125991260012601126021260312604126051260612607126081260912610126111261212613126141261512616126171261812619126201262112622126231262412625126261262712628126291263012631126321263312634126351263612637126381263912640126411264212643126441264512646126471264812649126501265112652126531265412655126561265712658126591266012661126621266312664126651266612667126681266912670126711267212673126741267512676126771267812679126801268112682126831268412685126861268712688126891269012691126921269312694126951269612697126981269912700127011270212703127041270512706127071270812709127101271112712127131271412715127161271712718127191272012721127221272312724127251272612727127281272912730127311273212733127341273512736127371273812739127401274112742127431274412745127461274712748127491275012751127521275312754127551275612757127581275912760127611276212763127641276512766127671276812769127701277112772127731277412775127761277712778127791278012781127821278312784127851278612787127881278912790127911279212793127941279512796127971279812799128001280112802128031280412805128061280712808128091281012811128121281312814128151281612817128181281912820128211282212823128241282512826128271282812829128301283112832128331283412835128361283712838128391284012841128421284312844128451284612847128481284912850128511285212853128541285512856128571285812859128601286112862128631286412865128661286712868128691287012871128721287312874128751287612877128781287912880128811288212883128841288512886128871288812889128901289112892128931289412895128961289712898128991290012901129021290312904129051290612907129081290912910129111291212913129141291512916129171291812919129201292112922129231292412925129261292712928129291293012931129321293312934129351293612937129381293912940129411294212943129441294512946129471294812949129501295112952129531295412955129561295712958129591296012961129621296312964129651296612967129681296912970129711297212973129741297512976129771297812979129801298112982129831298412985129861298712988129891299012991129921299312994129951299612997129981299913000130011300213003130041300513006130071300813009130101301113012130131301413015130161301713018130191302013021130221302313024130251302613027130281302913030130311303213033130341303513036130371303813039130401304113042130431304413045130461304713048130491305013051130521305313054130551305613057130581305913060130611306213063130641306513066130671306813069130701307113072130731307413075130761307713078130791308013081130821308313084130851308613087130881308913090130911309213093130941309513096130971309813099131001310113102131031310413105131061310713108131091311013111131121311313114131151311613117131181311913120131211312213123131241312513126131271312813129131301313113132131331313413135131361313713138131391314013141131421314313144131451314613147131481314913150131511315213153131541315513156131571315813159131601316113162131631316413165131661316713168131691317013171131721317313174131751317613177131781317913180131811318213183131841318513186131871318813189131901319113192131931319413195131961319713198131991320013201132021320313204132051320613207132081320913210132111321213213132141321513216132171321813219132201322113222132231322413225132261322713228132291323013231132321323313234132351323613237132381323913240132411324213243132441324513246132471324813249132501325113252132531325413255132561325713258132591326013261132621326313264132651326613267132681326913270132711327213273132741327513276132771327813279132801328113282132831328413285132861328713288132891329013291132921329313294132951329613297132981329913300133011330213303133041330513306133071330813309133101331113312133131331413315133161331713318133191332013321133221332313324133251332613327133281332913330133311333213333133341333513336133371333813339133401334113342133431334413345133461334713348133491335013351133521335313354133551335613357133581335913360133611336213363133641336513366133671336813369133701337113372133731337413375133761337713378133791338013381133821338313384133851338613387133881338913390133911339213393133941339513396133971339813399134001340113402134031340413405134061340713408134091341013411134121341313414134151341613417134181341913420134211342213423134241342513426134271342813429134301343113432134331343413435134361343713438134391344013441134421344313444134451344613447134481344913450134511345213453134541345513456134571345813459134601346113462134631346413465134661346713468134691347013471134721347313474134751347613477134781347913480134811348213483134841348513486134871348813489134901349113492134931349413495134961349713498134991350013501135021350313504135051350613507135081350913510135111351213513135141351513516135171351813519135201352113522135231352413525135261352713528135291353013531135321353313534135351353613537135381353913540135411354213543135441354513546135471354813549135501355113552135531355413555135561355713558135591356013561135621356313564135651356613567135681356913570135711357213573135741357513576135771357813579135801358113582135831358413585135861358713588135891359013591135921359313594135951359613597135981359913600136011360213603136041360513606136071360813609136101361113612136131361413615136161361713618136191362013621136221362313624136251362613627136281362913630136311363213633136341363513636136371363813639136401364113642136431364413645136461364713648136491365013651136521365313654136551365613657136581365913660136611366213663136641366513666136671366813669136701367113672136731367413675136761367713678136791368013681136821368313684136851368613687136881368913690136911369213693136941369513696136971369813699137001370113702137031370413705137061370713708137091371013711137121371313714137151371613717137181371913720137211372213723137241372513726137271372813729137301373113732137331373413735137361373713738137391374013741137421374313744137451374613747137481374913750137511375213753137541375513756137571375813759137601376113762137631376413765137661376713768137691377013771137721377313774137751377613777137781377913780137811378213783137841378513786137871378813789137901379113792137931379413795137961379713798137991380013801138021380313804138051380613807138081380913810138111381213813138141381513816138171381813819138201382113822138231382413825138261382713828138291383013831138321383313834138351383613837138381383913840138411384213843138441384513846138471384813849138501385113852138531385413855138561385713858138591386013861138621386313864138651386613867138681386913870138711387213873138741387513876138771387813879138801388113882138831388413885138861388713888138891389013891138921389313894138951389613897138981389913900139011390213903139041390513906139071390813909139101391113912139131391413915139161391713918139191392013921139221392313924139251392613927139281392913930139311393213933139341393513936139371393813939139401394113942139431394413945139461394713948139491395013951139521395313954139551395613957139581395913960139611396213963139641396513966139671396813969139701397113972139731397413975139761397713978139791398013981139821398313984139851398613987139881398913990139911399213993139941399513996139971399813999140001400114002140031400414005140061400714008140091401014011140121401314014140151401614017140181401914020140211402214023140241402514026140271402814029140301403114032140331403414035140361403714038140391404014041140421404314044140451404614047140481404914050140511405214053140541405514056140571405814059140601406114062140631406414065140661406714068140691407014071140721407314074140751407614077140781407914080140811408214083140841408514086140871408814089140901409114092140931409414095140961409714098140991410014101141021410314104141051410614107141081410914110141111411214113141141411514116141171411814119141201412114122141231412414125141261412714128141291413014131141321413314134141351413614137141381413914140141411414214143141441414514146141471414814149141501415114152141531415414155141561415714158141591416014161141621416314164141651416614167141681416914170141711417214173141741417514176141771417814179141801418114182141831418414185141861418714188141891419014191141921419314194141951419614197141981419914200142011420214203142041420514206142071420814209142101421114212142131421414215142161421714218142191422014221142221422314224142251422614227142281422914230142311423214233142341423514236142371423814239142401424114242142431424414245142461424714248142491425014251142521425314254142551425614257142581425914260142611426214263142641426514266142671426814269142701427114272142731427414275142761427714278142791428014281142821428314284142851428614287142881428914290142911429214293142941429514296142971429814299143001430114302143031430414305143061430714308143091431014311143121431314314143151431614317143181431914320143211432214323143241432514326143271432814329143301433114332143331433414335143361433714338143391434014341143421434314344143451434614347143481434914350143511435214353143541435514356143571435814359143601436114362143631436414365143661436714368143691437014371143721437314374143751437614377143781437914380143811438214383143841438514386143871438814389143901439114392143931439414395143961439714398143991440014401144021440314404144051440614407144081440914410144111441214413144141441514416144171441814419144201442114422144231442414425144261442714428144291443014431144321443314434144351443614437144381443914440144411444214443144441444514446144471444814449144501445114452144531445414455144561445714458144591446014461144621446314464144651446614467144681446914470144711447214473144741447514476144771447814479144801448114482144831448414485144861448714488144891449014491144921449314494144951449614497144981449914500145011450214503145041450514506145071450814509145101451114512145131451414515145161451714518145191452014521145221452314524145251452614527145281452914530145311453214533145341453514536145371453814539145401454114542145431454414545145461454714548145491455014551145521455314554145551455614557145581455914560145611456214563145641456514566145671456814569145701457114572145731457414575145761457714578145791458014581145821458314584145851458614587145881458914590145911459214593145941459514596145971459814599146001460114602146031460414605146061460714608146091461014611146121461314614146151461614617146181461914620146211462214623146241462514626146271462814629146301463114632146331463414635146361463714638146391464014641146421464314644146451464614647146481464914650146511465214653146541465514656146571465814659146601466114662146631466414665146661466714668146691467014671146721467314674146751467614677146781467914680146811468214683146841468514686146871468814689146901469114692146931469414695146961469714698146991470014701147021470314704147051470614707147081470914710147111471214713147141471514716147171471814719147201472114722147231472414725147261472714728147291473014731147321473314734147351473614737147381473914740147411474214743147441474514746147471474814749147501475114752147531475414755147561475714758147591476014761147621476314764147651476614767147681476914770147711477214773147741477514776147771477814779147801478114782147831478414785147861478714788147891479014791147921479314794147951479614797147981479914800148011480214803148041480514806148071480814809148101481114812148131481414815148161481714818148191482014821148221482314824148251482614827148281482914830148311483214833148341483514836148371483814839148401484114842148431484414845148461484714848148491485014851148521485314854148551485614857148581485914860148611486214863148641486514866148671486814869148701487114872148731487414875148761487714878148791488014881148821488314884148851488614887148881488914890148911489214893148941489514896148971489814899149001490114902149031490414905149061490714908149091491014911149121491314914149151491614917149181491914920149211492214923149241492514926149271492814929149301493114932149331493414935149361493714938149391494014941149421494314944149451494614947149481494914950149511495214953149541495514956149571495814959149601496114962149631496414965149661496714968149691497014971149721497314974149751497614977149781497914980149811498214983149841498514986149871498814989149901499114992149931499414995149961499714998149991500015001150021500315004150051500615007150081500915010150111501215013150141501515016150171501815019150201502115022150231502415025150261502715028150291503015031150321503315034150351503615037150381503915040150411504215043150441504515046150471504815049150501505115052150531505415055150561505715058150591506015061150621506315064150651506615067150681506915070150711507215073150741507515076150771507815079150801508115082150831508415085150861508715088150891509015091150921509315094150951509615097150981509915100151011510215103151041510515106151071510815109151101511115112151131511415115151161511715118151191512015121151221512315124151251512615127151281512915130151311513215133151341513515136151371513815139151401514115142151431514415145151461514715148151491515015151151521515315154151551515615157151581515915160151611516215163151641516515166151671516815169151701517115172151731517415175151761517715178151791518015181151821518315184151851518615187151881518915190151911519215193151941519515196151971519815199152001520115202152031520415205152061520715208152091521015211152121521315214152151521615217152181521915220152211522215223152241522515226152271522815229152301523115232152331523415235152361523715238152391524015241152421524315244152451524615247152481524915250152511525215253152541525515256152571525815259152601526115262152631526415265152661526715268152691527015271152721527315274152751527615277152781527915280152811528215283152841528515286152871528815289152901529115292152931529415295152961529715298152991530015301153021530315304153051530615307153081530915310153111531215313153141531515316153171531815319153201532115322153231532415325153261532715328153291533015331153321533315334153351533615337153381533915340153411534215343153441534515346153471534815349153501535115352153531535415355153561535715358153591536015361153621536315364153651536615367153681536915370153711537215373153741537515376153771537815379153801538115382153831538415385153861538715388153891539015391153921539315394153951539615397153981539915400154011540215403154041540515406154071540815409154101541115412154131541415415154161541715418154191542015421154221542315424154251542615427154281542915430154311543215433154341543515436154371543815439154401544115442154431544415445154461544715448154491545015451154521545315454154551545615457154581545915460154611546215463154641546515466154671546815469154701547115472154731547415475154761547715478154791548015481154821548315484154851548615487154881548915490154911549215493154941549515496154971549815499155001550115502155031550415505155061550715508155091551015511155121551315514155151551615517155181551915520155211552215523155241552515526155271552815529155301553115532155331553415535155361553715538155391554015541155421554315544155451554615547155481554915550155511555215553155541555515556155571555815559155601556115562155631556415565155661556715568155691557015571155721557315574155751557615577155781557915580155811558215583155841558515586155871558815589155901559115592155931559415595155961559715598155991560015601156021560315604156051560615607156081560915610156111561215613156141561515616156171561815619156201562115622156231562415625156261562715628156291563015631156321563315634156351563615637156381563915640156411564215643156441564515646156471564815649156501565115652156531565415655156561565715658156591566015661156621566315664156651566615667156681566915670156711567215673156741567515676156771567815679156801568115682156831568415685156861568715688156891569015691156921569315694156951569615697156981569915700157011570215703157041570515706157071570815709157101571115712157131571415715157161571715718157191572015721157221572315724157251572615727157281572915730157311573215733157341573515736157371573815739157401574115742157431574415745157461574715748157491575015751157521575315754157551575615757157581575915760157611576215763157641576515766157671576815769157701577115772157731577415775157761577715778157791578015781157821578315784157851578615787157881578915790157911579215793157941579515796157971579815799158001580115802158031580415805158061580715808158091581015811158121581315814158151581615817158181581915820158211582215823158241582515826158271582815829158301583115832158331583415835158361583715838158391584015841158421584315844158451584615847158481584915850158511585215853158541585515856158571585815859158601586115862158631586415865158661586715868158691587015871158721587315874158751587615877158781587915880158811588215883158841588515886158871588815889158901589115892158931589415895158961589715898158991590015901159021590315904159051590615907159081590915910159111591215913159141591515916159171591815919159201592115922159231592415925159261592715928159291593015931159321593315934159351593615937159381593915940159411594215943159441594515946159471594815949159501595115952159531595415955159561595715958159591596015961159621596315964159651596615967159681596915970159711597215973159741597515976159771597815979159801598115982159831598415985159861598715988159891599015991159921599315994159951599615997159981599916000160011600216003160041600516006160071600816009160101601116012160131601416015160161601716018160191602016021160221602316024160251602616027160281602916030160311603216033160341603516036160371603816039160401604116042160431604416045160461604716048160491605016051160521605316054160551605616057160581605916060160611606216063160641606516066160671606816069160701607116072160731607416075160761607716078160791608016081160821608316084160851608616087160881608916090160911609216093160941609516096160971609816099161001610116102161031610416105161061610716108161091611016111161121611316114161151611616117161181611916120161211612216123161241612516126161271612816129161301613116132161331613416135161361613716138161391614016141161421614316144161451614616147161481614916150161511615216153161541615516156161571615816159161601616116162161631616416165161661616716168161691617016171161721617316174161751617616177161781617916180161811618216183161841618516186161871618816189161901619116192161931619416195161961619716198161991620016201162021620316204162051620616207162081620916210162111621216213162141621516216162171621816219162201622116222162231622416225162261622716228162291623016231162321623316234162351623616237162381623916240162411624216243162441624516246162471624816249162501625116252162531625416255162561625716258162591626016261162621626316264162651626616267162681626916270162711627216273162741627516276162771627816279162801628116282162831628416285162861628716288162891629016291162921629316294162951629616297162981629916300163011630216303163041630516306163071630816309163101631116312163131631416315163161631716318163191632016321163221632316324163251632616327163281632916330163311633216333163341633516336163371633816339163401634116342163431634416345163461634716348163491635016351163521635316354163551635616357163581635916360163611636216363163641636516366163671636816369163701637116372163731637416375163761637716378163791638016381163821638316384163851638616387163881638916390163911639216393163941639516396163971639816399164001640116402164031640416405164061640716408164091641016411164121641316414164151641616417164181641916420164211642216423164241642516426164271642816429164301643116432164331643416435164361643716438164391644016441164421644316444164451644616447164481644916450164511645216453164541645516456164571645816459164601646116462164631646416465164661646716468164691647016471164721647316474164751647616477164781647916480164811648216483164841648516486164871648816489164901649116492164931649416495164961649716498164991650016501165021650316504165051650616507165081650916510165111651216513165141651516516165171651816519165201652116522165231652416525165261652716528165291653016531165321653316534165351653616537165381653916540165411654216543165441654516546165471654816549165501655116552165531655416555165561655716558165591656016561165621656316564165651656616567165681656916570165711657216573165741657516576165771657816579165801658116582165831658416585165861658716588165891659016591165921659316594165951659616597165981659916600166011660216603166041660516606166071660816609166101661116612166131661416615166161661716618166191662016621166221662316624166251662616627166281662916630166311663216633166341663516636166371663816639166401664116642166431664416645166461664716648166491665016651166521665316654166551665616657166581665916660166611666216663166641666516666166671666816669166701667116672166731667416675166761667716678166791668016681166821668316684166851668616687166881668916690166911669216693166941669516696166971669816699167001670116702167031670416705167061670716708167091671016711167121671316714167151671616717167181671916720167211672216723167241672516726167271672816729167301673116732167331673416735167361673716738167391674016741167421674316744167451674616747167481674916750167511675216753167541675516756167571675816759167601676116762167631676416765167661676716768167691677016771{ "openapi": "3.1.0", "info": { "title": "Rocksky XRPC API", "version": "1.0.0", "description": "Generated from the registered Rocksky XRPC handlers and current lexicons. Provider-defined payloads remain open schemas. Some handlers return empty fallback objects on service failures. This reference describes the repository implementation; production may run an earlier revision.", "license": { "name": "MIT License", "identifier": "MIT" } }, "servers": [ { "url": "https://api.rocksky.app/xrpc", "description": "Rocksky API" } ], "paths": { "/app.rocksky.actor.getActorAlbums": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get albums for an actor", "operationId": "app.rocksky.actor.getActorAlbums", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of albums to return", "schema": { "type": "integer", "description": "The maximum number of albums to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "startDate", "in": "query", "required": false, "description": "The start date to filter albums from (ISO 8601 format)", "schema": { "type": "string", "description": "The start date to filter albums from (ISO 8601 format)", "format": "date-time" } }, { "name": "endDate", "in": "query", "required": false, "description": "The end date to filter albums to (ISO 8601 format)", "schema": { "type": "string", "description": "The end date to filter albums to (ISO 8601 format)", "format": "date-time" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "albums": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__albumViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getActorArtists": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get artists for an actor", "operationId": "app.rocksky.actor.getActorArtists", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of albums to return", "schema": { "type": "integer", "description": "The maximum number of albums to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "startDate", "in": "query", "required": false, "description": "The start date to filter albums from (ISO 8601 format)", "schema": { "type": "string", "description": "The start date to filter albums from (ISO 8601 format)", "format": "date-time" } }, { "name": "endDate", "in": "query", "required": false, "description": "The end date to filter albums to (ISO 8601 format)", "schema": { "type": "string", "description": "The end date to filter albums to (ISO 8601 format)", "format": "date-time" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__artistViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getActorCompatibility": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get compatibility for an actor", "operationId": "app.rocksky.actor.getActorCompatibility", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "DID or handle to get compatibility for", "schema": { "type": "string", "description": "DID or handle to get compatibility for", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "compatibility": { "anyOf": [ { "$ref": "#/components/schemas/app.rocksky.actor.defs__compatibilityViewBasic" }, { "type": "null" } ] } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getActorLovedSongs": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get loved songs for an actor", "operationId": "app.rocksky.actor.getActorLovedSongs", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of albums to return", "schema": { "type": "integer", "description": "The maximum number of albums to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getActorNeighbours": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get neighbours for an actor", "operationId": "app.rocksky.actor.getActorNeighbours", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "neighbours": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.actor.defs__neighbourViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getActorPlaylists": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get playlists for an actor", "operationId": "app.rocksky.actor.getActorPlaylists", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of playlists to return", "schema": { "type": "integer", "description": "The maximum number of playlists to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "filter", "in": "query", "required": false, "description": "RSQL filter expression, e.g. `name==\"Road trip*\";track.artist==\"Daft Punk\"`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: name, title, description, uri, spotifyLink, tidalLink, appleMusicLink, createdAt, updatedAt. The `track.title`, `track.artist`, `track.album` and `track.albumArtist` selectors match the playlist's contents, returning playlists that contain a matching track; several `track.*` terms joined with `;` must all be satisfied by the same track.", "schema": { "type": "string", "description": "RSQL filter expression, e.g. `name==\"Road trip*\";track.artist==\"Daft Punk\"`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: name, title, description, uri, spotifyLink, tidalLink, appleMusicLink, createdAt, updatedAt. The `track.title`, `track.artist`, `track.album` and `track.albumArtist` selectors match the playlist's contents, returning playlists that contain a matching track; several `track.*` terms joined with `;` must all be satisfied by the same track.", "maxLength": 2048 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "playlists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.playlist.defs__playlistViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getActorScrobbles": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get scrobbles for an actor", "operationId": "app.rocksky.actor.getActorScrobbles", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of albums to return", "schema": { "type": "integer", "description": "The maximum number of albums to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "scrobbles": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.scrobble.defs__scrobbleViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getActorSongs": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get songs for an actor", "operationId": "app.rocksky.actor.getActorSongs", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of albums to return", "schema": { "type": "integer", "description": "The maximum number of albums to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "startDate", "in": "query", "required": false, "description": "The start date to filter albums from (ISO 8601 format)", "schema": { "type": "string", "description": "The start date to filter albums from (ISO 8601 format)", "format": "date-time" } }, { "name": "endDate", "in": "query", "required": false, "description": "The end date to filter albums to (ISO 8601 format)", "schema": { "type": "string", "description": "The end date to filter albums to (ISO 8601 format)", "format": "date-time" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.actor.getProfile": { "get": { "tags": [ "app.rocksky.actor" ], "summary": "Get the profile of an actor", "operationId": "app.rocksky.actor.getProfile", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.album.getAlbum": { "get": { "tags": [ "app.rocksky.album" ], "summary": "Get detailed album view", "operationId": "app.rocksky.album.getAlbum", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the album to retrieve.", "schema": { "type": "string", "description": "The URI of the album to retrieve.", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.album.defs__albumViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.album.getAlbumTracks": { "get": { "tags": [ "app.rocksky.album" ], "summary": "Get tracks for an album", "operationId": "app.rocksky.album.getAlbumTracks", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the album to retrieve tracks from", "schema": { "type": "string", "description": "The URI of the album to retrieve tracks from", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.album.getAlbums": { "get": { "tags": [ "app.rocksky.album" ], "summary": "Get albums", "operationId": "app.rocksky.album.getAlbums", "security": [], "parameters": [ { "name": "limit", "in": "query", "required": false, "description": "The maximum number of albums to return", "schema": { "type": "integer", "description": "The maximum number of albums to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "genre", "in": "query", "required": false, "description": "The genre to filter artists by", "schema": { "type": "string", "description": "The genre to filter artists by" } }, { "name": "filter", "in": "query", "required": false, "description": "RSQL filter expression, e.g. `artist==\"Daft Punk\";year=ge=2000`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: title, artist, year, releaseDate, sha256, uri, artistUri, createdAt", "schema": { "type": "string", "description": "RSQL filter expression, e.g. `artist==\"Daft Punk\";year=ge=2000`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: title, artist, year, releaseDate, sha256, uri, artistUri, createdAt", "maxLength": 2048 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "albums": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__albumViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.apikey.createApikey": { "post": { "tags": [ "app.rocksky.apikey" ], "summary": "Create a new API key for the authenticated user", "operationId": "app.rocksky.apikey.createApikey", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.apikey.defs__apiKeyView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "description": "The name of the API key." }, "description": { "type": "string", "description": "A description for the API key." } }, "required": [ "name" ] } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.apikey.getApikeys": { "get": { "tags": [ "app.rocksky.apikey" ], "summary": "Get a list of API keys for the authenticated user", "operationId": "app.rocksky.apikey.getApikeys", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "offset", "in": "query", "required": false, "description": "The number of API keys to skip before starting to collect the result set.", "schema": { "type": "integer", "description": "The number of API keys to skip before starting to collect the result set." } }, { "name": "limit", "in": "query", "required": false, "description": "The number of API keys to return per page.", "schema": { "type": "integer", "description": "The number of API keys to return per page." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "apikeys": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.apikey.defs__apiKeyView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.apikey.removeApikey": { "post": { "tags": [ "app.rocksky.apikey" ], "summary": "Remove an API key for the authenticated user", "operationId": "app.rocksky.apikey.removeApikey", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The ID of the API key to remove.", "schema": { "type": "string", "description": "The ID of the API key to remove." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.apikey.defs__apiKeyView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.apikey.updateApikey": { "post": { "tags": [ "app.rocksky.apikey" ], "summary": "Update an existing API key for the authenticated user", "operationId": "app.rocksky.apikey.updateApikey", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.apikey.defs__apiKeyView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The ID of the API key to update." }, "name": { "type": "string", "description": "The new name of the API key." }, "description": { "type": "string", "description": "A new description for the API key." } }, "required": [ "id", "name" ] } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.artist.getArtist": { "get": { "tags": [ "app.rocksky.artist" ], "summary": "Get artist details", "operationId": "app.rocksky.artist.getArtist", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the artist to retrieve details from", "schema": { "type": "string", "description": "The URI of the artist to retrieve details from", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.artist.defs__artistViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.artist.getArtistAlbums": { "get": { "tags": [ "app.rocksky.artist" ], "summary": "Get artist's albums", "operationId": "app.rocksky.artist.getArtistAlbums", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the artist to retrieve albums from", "schema": { "type": "string", "description": "The URI of the artist to retrieve albums from", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "albums": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__albumViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.artist.getArtistEvents": { "get": { "tags": [ "app.rocksky.artist" ], "summary": "Get the music events an artist is billed on, soonest first. Only unexpired events (ending today or later) unless `includePast` is set.", "operationId": "app.rocksky.artist.getArtistEvents", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the artist to retrieve events for", "schema": { "type": "string", "description": "The URI of the artist to retrieve events for", "x-lexicon-format": "at-uri" } }, { "name": "includePast", "in": "query", "required": false, "description": "Return past events too, most recent first.", "schema": { "type": "boolean", "description": "Return past events too, most recent first." } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of events to return.", "schema": { "type": "integer", "description": "The maximum number of events to return.", "default": 20, "minimum": 1, "maximum": 100 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination.", "schema": { "type": "integer", "description": "The offset for pagination.", "default": 0, "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "events": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.event.defs__eventView" } } }, "required": [ "events" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.artist.getArtistListeners": { "get": { "tags": [ "app.rocksky.artist" ], "summary": "Get artist listeners", "operationId": "app.rocksky.artist.getArtistListeners", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the artist to retrieve listeners from", "schema": { "type": "string", "description": "The URI of the artist to retrieve listeners from", "x-lexicon-format": "at-uri" } }, { "name": "offset", "in": "query", "required": false, "description": "Number of items to skip before returning results", "schema": { "type": "integer", "description": "Number of items to skip before returning results" } }, { "name": "limit", "in": "query", "required": false, "description": "Maximum number of results to return", "schema": { "type": "integer", "description": "Maximum number of results to return" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "listeners": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__listenerViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.artist.getArtistRecentListeners": { "get": { "tags": [ "app.rocksky.artist" ], "summary": "Get artist recent listeners ordered by most recent scrobble", "operationId": "app.rocksky.artist.getArtistRecentListeners", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the artist to retrieve recent listeners from", "schema": { "type": "string", "description": "The URI of the artist to retrieve recent listeners from", "x-lexicon-format": "at-uri" } }, { "name": "offset", "in": "query", "required": false, "description": "Number of items to skip before returning results", "schema": { "type": "integer", "description": "Number of items to skip before returning results" } }, { "name": "limit", "in": "query", "required": false, "description": "Maximum number of results to return", "schema": { "type": "integer", "description": "Maximum number of results to return" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "listeners": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__recentListenerView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.artist.getArtistTracks": { "get": { "tags": [ "app.rocksky.artist" ], "summary": "Get artist's tracks", "operationId": "app.rocksky.artist.getArtistTracks", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": false, "description": "The URI of the artist to retrieve albums from", "schema": { "type": "string", "description": "The URI of the artist to retrieve albums from", "x-lexicon-format": "at-uri" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of tracks to return", "schema": { "type": "integer", "description": "The maximum number of tracks to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.artist.getArtists": { "get": { "tags": [ "app.rocksky.artist" ], "summary": "Get artists", "operationId": "app.rocksky.artist.getArtists", "security": [], "parameters": [ { "name": "limit", "in": "query", "required": false, "description": "The maximum number of artists to return", "schema": { "type": "integer", "description": "The maximum number of artists to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "names", "in": "query", "required": false, "description": "The names of the artists to return", "schema": { "type": "string", "description": "The names of the artists to return" } }, { "name": "genre", "in": "query", "required": false, "description": "The genre to filter artists by", "schema": { "type": "string", "description": "The genre to filter artists by" } }, { "name": "filter", "in": "query", "required": false, "description": "RSQL filter expression, e.g. `name==Daft*;genres=in=(house,electro)`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: name, genres, bornIn, born, died, sha256, uri, createdAt", "schema": { "type": "string", "description": "RSQL filter expression, e.g. `name==Daft*;genres=in=(house,electro)`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: name, genres, bornIn, born, died, sha256, uri, createdAt", "maxLength": 2048 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__artistViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.charts.getDecades": { "get": { "tags": [ "app.rocksky.charts" ], "summary": "Get scrobble counts grouped by the release decade of the music", "operationId": "app.rocksky.charts.getDecades", "security": [], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "The DID or handle of the actor to scope the chart to", "schema": { "type": "string", "description": "The DID or handle of the actor to scope the chart to", "x-lexicon-format": "at-identifier" } }, { "name": "startDate", "in": "query", "required": false, "description": "The start date to count scrobbles from (ISO 8601 format)", "schema": { "type": "string", "description": "The start date to count scrobbles from (ISO 8601 format)", "format": "date-time" } }, { "name": "endDate", "in": "query", "required": false, "description": "The end date to count scrobbles to (ISO 8601 format)", "schema": { "type": "string", "description": "The end date to count scrobbles to (ISO 8601 format)", "format": "date-time" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "decades": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.charts.defs__decadeViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.charts.getScrobblesChart": { "get": { "tags": [ "app.rocksky.charts" ], "summary": "Get the scrobbles chart", "operationId": "app.rocksky.charts.getScrobblesChart", "security": [], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "artisturi", "in": "query", "required": false, "description": "The URI of the artist to filter by", "schema": { "type": "string", "description": "The URI of the artist to filter by", "x-lexicon-format": "at-uri" } }, { "name": "albumuri", "in": "query", "required": false, "description": "The URI of the album to filter by", "schema": { "type": "string", "description": "The URI of the album to filter by", "x-lexicon-format": "at-uri" } }, { "name": "songuri", "in": "query", "required": false, "description": "The URI of the track to filter by", "schema": { "type": "string", "description": "The URI of the track to filter by", "x-lexicon-format": "at-uri" } }, { "name": "genre", "in": "query", "required": false, "description": "The genre to filter by", "schema": { "type": "string", "description": "The genre to filter by" } }, { "name": "from", "in": "query", "required": false, "description": "Start date (ISO 8601). Defaults to 6 months ago.", "schema": { "type": "string", "description": "Start date (ISO 8601). Defaults to 6 months ago." } }, { "name": "to", "in": "query", "required": false, "description": "End date (ISO 8601). Defaults to today.", "schema": { "type": "string", "description": "End date (ISO 8601). Defaults to today." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.charts.defs__chartsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.charts.getTopArtists": { "get": { "tags": [ "app.rocksky.charts" ], "summary": "Get top artists", "operationId": "app.rocksky.charts.getTopArtists", "security": [], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "The DID or handle of the actor to scope the chart to", "schema": { "type": "string", "description": "The DID or handle of the actor to scope the chart to", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of artists to return", "schema": { "type": "integer", "description": "The maximum number of artists to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "startDate", "in": "query", "required": false, "description": "The start date to filter artists from (ISO 8601 format)", "schema": { "type": "string", "description": "The start date to filter artists from (ISO 8601 format)", "format": "date-time" } }, { "name": "endDate", "in": "query", "required": false, "description": "The end date to filter artists to (ISO 8601 format)", "schema": { "type": "string", "description": "The end date to filter artists to (ISO 8601 format)", "format": "date-time" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__artistViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.charts.getTopScrobblers": { "get": { "tags": [ "app.rocksky.charts" ], "summary": "Get the listeners who scrobbled the most, all-time or over a date range", "operationId": "app.rocksky.charts.getTopScrobblers", "security": [], "parameters": [ { "name": "limit", "in": "query", "required": false, "description": "The maximum number of scrobblers to return", "schema": { "type": "integer", "description": "The maximum number of scrobblers to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "startDate", "in": "query", "required": false, "description": "The start date to count scrobbles from (ISO 8601 format)", "schema": { "type": "string", "description": "The start date to count scrobbles from (ISO 8601 format)", "format": "date-time" } }, { "name": "endDate", "in": "query", "required": false, "description": "The end date to count scrobbles to (ISO 8601 format)", "schema": { "type": "string", "description": "The end date to count scrobbles to (ISO 8601 format)", "format": "date-time" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "scrobblers": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.charts.defs__scrobblerViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.charts.getTopTracks": { "get": { "tags": [ "app.rocksky.charts" ], "summary": "Get top tracks", "operationId": "app.rocksky.charts.getTopTracks", "security": [], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "The DID or handle of the actor to scope the chart to", "schema": { "type": "string", "description": "The DID or handle of the actor to scope the chart to", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of tracks to return", "schema": { "type": "integer", "description": "The maximum number of tracks to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "startDate", "in": "query", "required": false, "description": "The start date to filter tracks from (ISO 8601 format)", "schema": { "type": "string", "description": "The start date to filter tracks from (ISO 8601 format)", "format": "date-time" } }, { "name": "endDate", "in": "query", "required": false, "description": "The end date to filter tracks to (ISO 8601 format)", "schema": { "type": "string", "description": "The end date to filter tracks to (ISO 8601 format)", "format": "date-time" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.equalizer.deletePreset": { "post": { "tags": [ "app.rocksky.equalizer" ], "summary": "Delete one of the authenticated user's equalizer presets.", "operationId": "app.rocksky.equalizer.deletePreset", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "rkey", "in": "query", "required": true, "description": "Record key of the preset to delete.", "schema": { "type": "string", "description": "Record key of the preset to delete." } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.equalizer.listPresets": { "get": { "tags": [ "app.rocksky.equalizer" ], "summary": "List equalizer presets. If `did` is provided the request is public; otherwise an auth token is required and the caller's own presets are returned.", "operationId": "app.rocksky.equalizer.listPresets", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "DID or handle of the user whose presets to fetch. Required for unauthenticated requests.", "schema": { "type": "string", "description": "DID or handle of the user whose presets to fetch. Required for unauthenticated requests.", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "presets": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.equalizer.defs__presetView" } } }, "required": [ "presets" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Supply did for public lookup, or authenticate to use your own DID." } }, "/app.rocksky.equalizer.putPreset": { "post": { "tags": [ "app.rocksky.equalizer" ], "summary": "Create or update one of the authenticated user's equalizer presets. The record key is derived from the name (lower case, dashes, no spaces), so saving with an existing name overwrites that preset.", "operationId": "app.rocksky.equalizer.putPreset", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.equalizer.defs__presetView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "description": "Display name of the preset.", "minLength": 1, "maxLength": 64 }, "precut": { "type": "integer", "description": "Pre-amplification cut in tenths of dB applied before EQ bands (e.g. -60 = -6.0 dB)", "minimum": -240, "maximum": 0 }, "bands": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__equalizerBand" }, "description": "Up to 10 EQ bands" } }, "required": [ "name", "bands" ] } } } } } }, "/app.rocksky.event.getEvent": { "get": { "tags": [ "app.rocksky.event" ], "summary": "Get a music event by the AT-URI of either its calendar event record or its app.rocksky.event.music record.", "operationId": "app.rocksky.event.getEvent", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "AT-URI of the community.lexicon.calendar.event or app.rocksky.event.music record.", "schema": { "type": "string", "description": "AT-URI of the community.lexicon.calendar.event or app.rocksky.event.music record.", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.event.defs__eventView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.event.getEventRsvps": { "get": { "tags": [ "app.rocksky.event" ], "summary": "List who responded to an event, most recent first.", "operationId": "app.rocksky.event.getEventRsvps", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "AT-URI of the community.lexicon.calendar.event or app.rocksky.event.music record.", "schema": { "type": "string", "description": "AT-URI of the community.lexicon.calendar.event or app.rocksky.event.music record.", "x-lexicon-format": "at-uri" } }, { "name": "status", "in": "query", "required": false, "description": "Only responses with this status.", "schema": { "type": "string", "description": "Only responses with this status.", "x-lexicon-knownValues": [ "community.lexicon.calendar.rsvp#going", "community.lexicon.calendar.rsvp#interested", "community.lexicon.calendar.rsvp#notgoing" ] } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "default": 50, "minimum": 1, "maximum": 100 } }, { "name": "offset", "in": "query", "required": false, "schema": { "type": "integer", "default": 0, "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "rsvps": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.event.defs__rsvpView" } } }, "required": [ "rsvps" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.event.getEvents": { "get": { "tags": [ "app.rocksky.event" ], "summary": "List indexed music events, soonest first. Without a time window only unexpired events are returned: those ending (or, with no end, starting) today or later, plus undated ones.", "operationId": "app.rocksky.event.getEvents", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "artist", "in": "query", "required": false, "description": "Only events this artist plays: the artist's AT-URI, id or sha256.", "schema": { "type": "string", "description": "Only events this artist plays: the artist's AT-URI, id or sha256." } }, { "name": "did", "in": "query", "required": false, "description": "Only events published by this repo.", "schema": { "type": "string", "description": "Only events published by this repo.", "x-lexicon-format": "did" } }, { "name": "rsvpBy", "in": "query", "required": false, "description": "Only events this DID has RSVP'd to (going or interested).", "schema": { "type": "string", "description": "Only events this DID has RSVP'd to (going or interested).", "x-lexicon-format": "did" } }, { "name": "kind", "in": "query", "required": false, "description": "Only events of this kind (concert, festival...).", "schema": { "type": "string", "description": "Only events of this kind (concert, festival...)." } }, { "name": "genre", "in": "query", "required": false, "description": "Only events whose genre matches (case-insensitive).", "schema": { "type": "string", "description": "Only events whose genre matches (case-insensitive)." } }, { "name": "from", "in": "query", "required": false, "description": "Only events that end at or after this time. Defaults to the start of today (UTC) when neither `to` nor `includePast` is given.", "schema": { "type": "string", "description": "Only events that end at or after this time. Defaults to the start of today (UTC) when neither `to` nor `includePast` is given.", "format": "date-time" } }, { "name": "to", "in": "query", "required": false, "description": "Only events that start at or before this time.", "schema": { "type": "string", "description": "Only events that start at or before this time.", "format": "date-time" } }, { "name": "includePast", "in": "query", "required": false, "description": "Return past events too, most recent first, instead of upcoming ones.", "schema": { "type": "boolean", "description": "Return past events too, most recent first, instead of upcoming ones." } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of events to return.", "schema": { "type": "integer", "description": "The maximum number of events to return.", "default": 20, "minimum": 1, "maximum": 100 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination.", "schema": { "type": "integer", "description": "The offset for pagination.", "default": 0, "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "events": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.event.defs__eventView" } } }, "required": [ "events" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.event.putRsvp": { "post": { "tags": [ "app.rocksky.event" ], "summary": "Set the authenticated user's RSVP on an event. Reuses their existing RSVP record.", "operationId": "app.rocksky.event.putRsvp", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The RSVP record URI.", "x-lexicon-format": "at-uri" }, "status": { "type": "string", "x-lexicon-knownValues": [ "community.lexicon.calendar.rsvp#going", "community.lexicon.calendar.rsvp#interested", "community.lexicon.calendar.rsvp#notgoing" ] } }, "required": [ "uri", "status" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The calendar or music event URI.", "x-lexicon-format": "at-uri" }, "status": { "type": "string", "x-lexicon-knownValues": [ "community.lexicon.calendar.rsvp#going", "community.lexicon.calendar.rsvp#interested", "community.lexicon.calendar.rsvp#notgoing" ] } }, "required": [ "uri", "status" ] } } } } } }, "/app.rocksky.feed.getAlbumRecommendations": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Get personalised album recommendations for a user", "operationId": "app.rocksky.feed.getAlbumRecommendations", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "DID or handle of the user to recommend for.", "schema": { "type": "string", "description": "DID or handle of the user to recommend for." } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.feed.defs__recommendedAlbumsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.feed.getArtistRecommendations": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Get personalised artist recommendations for a user", "operationId": "app.rocksky.feed.getArtistRecommendations", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "DID or handle of the user to recommend for.", "schema": { "type": "string", "description": "DID or handle of the user to recommend for." } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.feed.defs__recommendedArtistsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.feed.getFeed": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Get the feed by uri", "operationId": "app.rocksky.feed.getFeed", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "feed", "in": "query", "required": true, "description": "The feed URI.", "schema": { "type": "string", "description": "The feed URI.", "x-lexicon-format": "at-uri" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of scrobbles to return", "schema": { "type": "integer", "description": "The maximum number of scrobbles to return", "minimum": 1 } }, { "name": "cursor", "in": "query", "required": false, "description": "The cursor for pagination", "schema": { "type": "string", "description": "The cursor for pagination" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.feed.defs__feedView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Authentication is required when filtering by following." } }, "/app.rocksky.feed.getFeedGenerator": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Get information about a feed generator", "operationId": "app.rocksky.feed.getFeedGenerator", "security": [], "parameters": [ { "name": "feed", "in": "query", "required": true, "description": "AT-URI of the feed generator record.", "schema": { "type": "string", "description": "AT-URI of the feed generator record.", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "view": { "$ref": "#/components/schemas/app.rocksky.feed.defs__feedGeneratorView" } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.feed.getFeedGenerators": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Get all feed generators", "operationId": "app.rocksky.feed.getFeedGenerators", "security": [], "parameters": [ { "name": "size", "in": "query", "required": false, "description": "The maximum number of feed generators to return.", "schema": { "type": "integer", "description": "The maximum number of feed generators to return.", "minimum": 1 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.feed.defs__feedGeneratorsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.feed.getRecommendations": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Get personalised track recommendations for a user", "operationId": "app.rocksky.feed.getRecommendations", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "DID or handle of the user to recommend for.", "schema": { "type": "string", "description": "DID or handle of the user to recommend for." } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "minimum": 1, "maximum": 100 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.feed.defs__recommendationsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.feed.getStories": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Get all currently playing tracks by users", "operationId": "app.rocksky.feed.getStories", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "size", "in": "query", "required": false, "description": "The maximum number of stories to return.", "schema": { "type": "integer", "description": "The maximum number of stories to return.", "minimum": 1 } }, { "name": "feed", "in": "query", "required": false, "description": "The feed URI to filter stories by.", "schema": { "type": "string", "description": "The feed URI to filter stories by.", "x-lexicon-format": "at-uri" } }, { "name": "following", "in": "query", "required": false, "description": "If true, only return stories from users the viewer follows. Requires authentication.", "schema": { "type": "boolean", "description": "If true, only return stories from users the viewer follows. Requires authentication." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.feed.defs__storiesView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Authentication is required when filtering by following." } }, "/app.rocksky.feed.search": { "get": { "tags": [ "app.rocksky.feed" ], "summary": "Search for content in the feed", "operationId": "app.rocksky.feed.search", "security": [], "parameters": [ { "name": "query", "in": "query", "required": true, "description": "The search query string", "schema": { "type": "string", "description": "The search query string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.feed.defs__searchResultsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.graph.followAccount": { "post": { "tags": [ "app.rocksky.graph" ], "summary": "Creates a 'follow' relationship from the authenticated account to a specified account.", "operationId": "app.rocksky.graph.followAccount", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "account", "in": "query", "required": true, "schema": { "type": "string", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" }, "followers": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" } }, "cursor": { "type": "string", "description": "A cursor value to pass to subsequent calls to get the next page of results." } }, "required": [ "subject", "followers" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.graph.getFollowers": { "get": { "tags": [ "app.rocksky.graph" ], "summary": "Enumerates accounts which follow a specified account (actor).", "operationId": "app.rocksky.graph.getFollowers", "security": [], "parameters": [ { "name": "actor", "in": "query", "required": true, "schema": { "type": "string", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "default": 50, "minimum": 1, "maximum": 100 } }, { "name": "dids", "in": "query", "required": false, "description": "If provided, filters the followers to only include those with DIDs in this list.", "schema": { "type": "array", "items": { "type": "string", "x-lexicon-format": "did" }, "description": "If provided, filters the followers to only include those with DIDs in this list." }, "style": "form", "explode": true }, { "name": "cursor", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" }, "followers": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" } }, "cursor": { "type": "string", "description": "A cursor value to pass to subsequent calls to get the next page of results." }, "count": { "type": "integer", "description": "The total number of followers." } }, "required": [ "subject", "followers" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.graph.getFollows": { "get": { "tags": [ "app.rocksky.graph" ], "summary": "Enumerates accounts which a specified account (actor) follows.", "operationId": "app.rocksky.graph.getFollows", "security": [], "parameters": [ { "name": "actor", "in": "query", "required": true, "schema": { "type": "string", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "default": 50, "minimum": 1, "maximum": 100 } }, { "name": "dids", "in": "query", "required": false, "description": "If provided, filters the follows to only include those with DIDs in this list.", "schema": { "type": "array", "items": { "type": "string", "x-lexicon-format": "did" }, "description": "If provided, filters the follows to only include those with DIDs in this list." }, "style": "form", "explode": true }, { "name": "cursor", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" }, "follows": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" } }, "cursor": { "type": "string", "description": "A cursor value to pass to subsequent calls to get the next page of results." }, "count": { "type": "integer", "description": "The total number of follows." } }, "required": [ "subject", "follows" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.graph.getKnownFollowers": { "get": { "tags": [ "app.rocksky.graph" ], "summary": "Enumerates accounts which follow a specified account (actor) and are followed by the viewer.", "operationId": "app.rocksky.graph.getKnownFollowers", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "actor", "in": "query", "required": true, "schema": { "type": "string", "x-lexicon-format": "at-identifier" } }, { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "default": 50, "minimum": 1, "maximum": 100 } }, { "name": "cursor", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" }, "followers": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" } }, "cursor": { "type": "string", "description": "A cursor value to pass to subsequent calls to get the next page of results." } }, "required": [ "subject", "followers" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Without authentication, returns an empty result." } }, "/app.rocksky.graph.unfollowAccount": { "post": { "tags": [ "app.rocksky.graph" ], "summary": "Removes a 'follow' relationship from the authenticated account to a specified account.", "operationId": "app.rocksky.graph.unfollowAccount", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "account", "in": "query", "required": true, "schema": { "type": "string", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "subject": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" }, "followers": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" } }, "cursor": { "type": "string", "description": "A cursor value to pass to subsequent calls to get the next page of results." } }, "required": [ "subject", "followers" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.createPlaylist": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Create a new playlist.", "operationId": "app.rocksky.library.createPlaylist", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "playlist": { "description": "Unmodified OpenSubsonic playlist payload from Navidrome. Its provider-defined fields are preserved." }, "atprotoError": { "type": "string", "description": "Non-fatal AT Protocol playlist mirror error, when available." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "name": { "type": "string", "description": "The playlist name." } }, "required": [ "name" ] } } } } } }, "/app.rocksky.library.deleteAlbum": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Delete an uploaded album owned by the authenticated user. Removes every upload the user owns for the album (storage objects + library entries); shared album/track metadata and scrobble history are preserved.", "operationId": "app.rocksky.library.deleteAlbum", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string", "description": "Always \"ok\" on success." }, "deleted": { "type": "integer", "description": "Number of uploads deleted for the album." } }, "required": [ "status", "deleted" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The album id (album xata_id, as exposed by the library API)." } }, "required": [ "id" ] } } } } } }, "/app.rocksky.library.deletePlaylist": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Delete a playlist.", "operationId": "app.rocksky.library.deletePlaylist", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "atprotoError": { "type": "string", "description": "Non-fatal AT Protocol playlist mirror error, when available." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The playlist id to delete." } }, "required": [ "id" ] } } } } } }, "/app.rocksky.library.deleteSong": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Delete an uploaded song owned by the authenticated user. Removes the user's upload (storage object + library entry); the shared track metadata and scrobble history are preserved.", "operationId": "app.rocksky.library.deleteSong", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string", "description": "Always \"ok\" on success." }, "deleted": { "type": "integer", "description": "Number of uploads deleted (0 or 1)." } }, "required": [ "status", "deleted" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The song id (track xata_id, as exposed by the library API)." } }, "required": [ "id" ] } } } } } }, "/app.rocksky.library.getAlbum": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get details for an album, including a list of songs.", "operationId": "app.rocksky.library.getAlbum", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The album id", "schema": { "type": "string", "description": "The album id" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "album": { "description": "Unmodified OpenSubsonic album payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getAlbumInfo": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get album notes, images and similar info.", "operationId": "app.rocksky.library.getAlbumInfo", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The album id", "schema": { "type": "string", "description": "The album id" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "albumInfo": { "description": "Unmodified OpenSubsonic albumInfo payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getAlbumList": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get a list of albums by various criteria.", "operationId": "app.rocksky.library.getAlbumList", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "type", "in": "query", "required": true, "description": "List type: newest, alphabeticalByName, alphabeticalByArtist, random, recent, byYear, byGenre, starred.", "schema": { "type": "string", "description": "List type: newest, alphabeticalByName, alphabeticalByArtist, random, recent, byYear, byGenre, starred." } }, { "name": "size", "in": "query", "required": false, "description": "Number of albums to return (max 500).", "schema": { "type": "integer", "description": "Number of albums to return (max 500)." } }, { "name": "offset", "in": "query", "required": false, "description": "Offset for pagination.", "schema": { "type": "integer", "description": "Offset for pagination.", "minimum": 0 } }, { "name": "fromYear", "in": "query", "required": false, "description": "First year in a byYear range.", "schema": { "type": "integer", "description": "First year in a byYear range." } }, { "name": "toYear", "in": "query", "required": false, "description": "Last year in a byYear range.", "schema": { "type": "integer", "description": "Last year in a byYear range." } }, { "name": "genre", "in": "query", "required": false, "description": "Genre name when type is byGenre.", "schema": { "type": "string", "description": "Genre name when type is byGenre." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "albumList2": { "description": "Unmodified OpenSubsonic albumList2 payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getArtist": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get details for an artist, including a list of albums.", "operationId": "app.rocksky.library.getArtist", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The artist id", "schema": { "type": "string", "description": "The artist id" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "artist": { "description": "Unmodified OpenSubsonic artist payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getArtistInfo": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get artist biography, images and similar artists.", "operationId": "app.rocksky.library.getArtistInfo", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The artist id", "schema": { "type": "string", "description": "The artist id" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "artistInfo2": { "description": "Unmodified OpenSubsonic artistInfo2 payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getArtists": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get all artists in the library, indexed alphabetically.", "operationId": "app.rocksky.library.getArtists", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "artists": { "description": "Unmodified OpenSubsonic artists payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getCoverArtUrl": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get a cover-art URL for an album, artist or song.", "operationId": "app.rocksky.library.getCoverArtUrl", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The cover-art id (album, artist or song).", "schema": { "type": "string", "description": "The cover-art id (album, artist or song)." } }, { "name": "size", "in": "query", "required": false, "description": "Requested square size in pixels.", "schema": { "type": "integer", "description": "Requested square size in pixels." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "url": { "type": "string", "description": "The resolved media or cover-art URL.", "format": "uri" } }, "required": [ "url" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getDownloadUrl": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get a download URL for a song.", "operationId": "app.rocksky.library.getDownloadUrl", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The song id.", "schema": { "type": "string", "description": "The song id." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "url": { "type": "string", "description": "The resolved media or cover-art URL.", "format": "uri" } }, "required": [ "url" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getGenres": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get all genres in the library.", "operationId": "app.rocksky.library.getGenres", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "genres": { "description": "Unmodified OpenSubsonic genres payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getIndexes": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get an indexed list of all artists.", "operationId": "app.rocksky.library.getIndexes", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "indexes": { "description": "Unmodified OpenSubsonic indexes payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getInternetRadioStations": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get all internet radio stations.", "operationId": "app.rocksky.library.getInternetRadioStations", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "internetRadioStations": { "description": "Unmodified OpenSubsonic internetRadioStations payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getLicense": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get details about the software license.", "operationId": "app.rocksky.library.getLicense", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "license": { "description": "Unmodified OpenSubsonic license payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getLyrics": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get lyrics for a song.", "operationId": "app.rocksky.library.getLyrics", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "artist", "in": "query", "required": false, "description": "The artist name.", "schema": { "type": "string", "description": "The artist name." } }, { "name": "title", "in": "query", "required": false, "description": "The song title.", "schema": { "type": "string", "description": "The song title." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "lyrics": { "description": "Unmodified OpenSubsonic lyrics payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getMusicDirectory": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Browse a music directory (artist, album or root).", "operationId": "app.rocksky.library.getMusicDirectory", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The directory id", "schema": { "type": "string", "description": "The directory id" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "directory": { "description": "Unmodified OpenSubsonic directory payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getMusicFolders": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get all configured top-level music folders.", "operationId": "app.rocksky.library.getMusicFolders", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "musicFolders": { "description": "Unmodified OpenSubsonic musicFolders payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getNowPlaying": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get what the user is currently playing.", "operationId": "app.rocksky.library.getNowPlaying", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "nowPlaying": { "description": "Unmodified OpenSubsonic nowPlaying payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getPlayQueue": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get the saved play queue for the user.", "operationId": "app.rocksky.library.getPlayQueue", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "playQueue": { "description": "Unmodified OpenSubsonic playQueue payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getPlaylist": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get a playlist and its entries.", "operationId": "app.rocksky.library.getPlaylist", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The playlist id", "schema": { "type": "string", "description": "The playlist id" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "playlist": { "description": "Unmodified OpenSubsonic playlist payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getPlaylists": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get all playlists owned by the user.", "operationId": "app.rocksky.library.getPlaylists", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "playlists": { "description": "Unmodified OpenSubsonic playlists payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getRandomSongs": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get a list of random songs.", "operationId": "app.rocksky.library.getRandomSongs", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "size", "in": "query", "required": false, "description": "Number of songs to return (max 500).", "schema": { "type": "integer", "description": "Number of songs to return (max 500)." } }, { "name": "genre", "in": "query", "required": false, "description": "Only return songs in this genre.", "schema": { "type": "string", "description": "Only return songs in this genre." } }, { "name": "fromYear", "in": "query", "required": false, "description": "Only return songs published after or in this year.", "schema": { "type": "integer", "description": "Only return songs published after or in this year." } }, { "name": "toYear", "in": "query", "required": false, "description": "Only return songs published before or in this year.", "schema": { "type": "integer", "description": "Only return songs published before or in this year." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "randomSongs": { "description": "Unmodified OpenSubsonic randomSongs payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getScanStatus": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get the current status of the media library scan.", "operationId": "app.rocksky.library.getScanStatus", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "scanStatus": { "description": "Unmodified OpenSubsonic scanStatus payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getSimilarSongs": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get songs similar to the given artist.", "operationId": "app.rocksky.library.getSimilarSongs", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The artist, album or song id", "schema": { "type": "string", "description": "The artist, album or song id" } }, { "name": "count", "in": "query", "required": false, "description": "Number of songs to return.", "schema": { "type": "integer", "description": "Number of songs to return." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "similarSongs2": { "description": "Unmodified OpenSubsonic similarSongs2 payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getSong": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get details for a single song.", "operationId": "app.rocksky.library.getSong", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The song id", "schema": { "type": "string", "description": "The song id" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "song": { "description": "Unmodified OpenSubsonic song payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getSongsByGenre": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get songs in a given genre.", "operationId": "app.rocksky.library.getSongsByGenre", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "genre", "in": "query", "required": true, "description": "The genre name.", "schema": { "type": "string", "description": "The genre name." } }, { "name": "count", "in": "query", "required": false, "description": "Number of songs to return (max 500).", "schema": { "type": "integer", "description": "Number of songs to return (max 500)." } }, { "name": "offset", "in": "query", "required": false, "description": "Offset for pagination.", "schema": { "type": "integer", "description": "Offset for pagination.", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "songsByGenre": { "description": "Unmodified OpenSubsonic songsByGenre payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getStarred": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get starred songs, albums and artists.", "operationId": "app.rocksky.library.getStarred", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "starred2": { "description": "Unmodified OpenSubsonic starred2 payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getStreamUrl": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get a playable stream URL for a song.", "operationId": "app.rocksky.library.getStreamUrl", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The song id.", "schema": { "type": "string", "description": "The song id." } }, { "name": "maxBitRate", "in": "query", "required": false, "description": "Maximum bitrate (kbps); 0 means no limit.", "schema": { "type": "integer", "description": "Maximum bitrate (kbps); 0 means no limit." } }, { "name": "format", "in": "query", "required": false, "description": "Preferred transcode format.", "schema": { "type": "string", "description": "Preferred transcode format." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "url": { "type": "string", "description": "The resolved media or cover-art URL.", "format": "uri" } }, "required": [ "url" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getTopSongs": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get the top songs for an artist.", "operationId": "app.rocksky.library.getTopSongs", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "artist", "in": "query", "required": true, "description": "The artist name.", "schema": { "type": "string", "description": "The artist name." } }, { "name": "count", "in": "query", "required": false, "description": "Number of songs to return.", "schema": { "type": "integer", "description": "Number of songs to return." } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "topSongs": { "description": "Unmodified OpenSubsonic topSongs payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.getUser": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Get details about the authenticated user.", "operationId": "app.rocksky.library.getUser", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "user": { "description": "Unmodified OpenSubsonic user payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.ping": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Test connectivity with the server.", "operationId": "app.rocksky.library.ping", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.savePlayQueue": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Save the play queue for the user.", "operationId": "app.rocksky.library.savePlayQueue", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "Comma-separated song ids in the queue." }, "current": { "type": "string", "description": "The id of the currently playing song." }, "position": { "type": "integer", "description": "Position within the current song, in milliseconds." } } } } } } } }, "/app.rocksky.library.scrobble": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Register a play (scrobble) for a song.", "operationId": "app.rocksky.library.scrobble", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The song id." }, "time": { "type": "integer", "description": "Play time as a Unix timestamp in milliseconds." }, "submission": { "type": "boolean", "description": "True for a final submission, false for a now-playing update." } }, "required": [ "id" ] } } } } } }, "/app.rocksky.library.search": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Search for artists, albums and songs.", "operationId": "app.rocksky.library.search", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "query", "in": "query", "required": true, "description": "The search query.", "schema": { "type": "string", "description": "The search query." } }, { "name": "artistCount", "in": "query", "required": false, "description": "Maximum number of artists to return.", "schema": { "type": "integer", "description": "Maximum number of artists to return." } }, { "name": "artistOffset", "in": "query", "required": false, "description": "Artist result offset.", "schema": { "type": "integer", "description": "Artist result offset.", "minimum": 0 } }, { "name": "albumCount", "in": "query", "required": false, "description": "Maximum number of albums to return.", "schema": { "type": "integer", "description": "Maximum number of albums to return." } }, { "name": "albumOffset", "in": "query", "required": false, "description": "Album result offset.", "schema": { "type": "integer", "description": "Album result offset.", "minimum": 0 } }, { "name": "songCount", "in": "query", "required": false, "description": "Maximum number of songs to return.", "schema": { "type": "integer", "description": "Maximum number of songs to return." } }, { "name": "songOffset", "in": "query", "required": false, "description": "Song result offset.", "schema": { "type": "integer", "description": "Song result offset.", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "searchResult3": { "description": "Unmodified OpenSubsonic searchResult3 payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.star": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Star a song, album or artist.", "operationId": "app.rocksky.library.star", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The song id to star." }, "albumId": { "type": "string", "description": "An album id to star." }, "artistId": { "type": "string", "description": "An artist id to star." } }, "required": [ "id" ] } } } } } }, "/app.rocksky.library.startScan": { "get": { "tags": [ "app.rocksky.library" ], "summary": "Initiate a rescan of the media library.", "operationId": "app.rocksky.library.startScan", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "scanStatus": { "description": "Unmodified OpenSubsonic scanStatus payload from Navidrome. Its provider-defined fields are preserved." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.library.unstar": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Remove a star from a song, album or artist.", "operationId": "app.rocksky.library.unstar", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The song id to unstar." }, "albumId": { "type": "string", "description": "An album id to unstar." }, "artistId": { "type": "string", "description": "An artist id to unstar." } }, "required": [ "id" ] } } } } } }, "/app.rocksky.library.updateNowPlaying": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Update the now-playing song for the user.", "operationId": "app.rocksky.library.updateNowPlaying", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "id": { "type": "string", "description": "The song id." } }, "required": [ "id" ] } } } } } }, "/app.rocksky.library.updatePlaylist": { "post": { "tags": [ "app.rocksky.library" ], "summary": "Update an existing playlist.", "operationId": "app.rocksky.library.updatePlaylist", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string" }, "version": { "type": "string" }, "type": { "type": "string" }, "serverVersion": { "type": "string" }, "openSubsonic": { "type": "boolean" }, "atprotoError": { "type": "string", "description": "Non-fatal AT Protocol playlist mirror error, when available." } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "playlistId": { "type": "string", "description": "The playlist id to update." }, "name": { "type": "string", "description": "New playlist name." }, "comment": { "type": "string", "description": "New playlist comment." }, "songIdToAdd": { "type": "string", "description": "A song id to add to the playlist." }, "songIndexToRemove": { "type": "integer", "description": "A track index to remove from the playlist." } }, "required": [ "playlistId" ] } } } } } }, "/app.rocksky.like.dislikeShout": { "post": { "tags": [ "app.rocksky.like" ], "summary": "Dislike a shout", "operationId": "app.rocksky.like.dislikeShout", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The unique identifier of the shout to dislike", "x-lexicon-format": "at-uri" } } } } } } } }, "/app.rocksky.like.dislikeSong": { "post": { "tags": [ "app.rocksky.like" ], "summary": "Dislike a song", "operationId": "app.rocksky.like.dislikeSong", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The unique identifier of the song to dislike", "x-lexicon-format": "at-uri" } } } } } } } }, "/app.rocksky.like.likeShout": { "post": { "tags": [ "app.rocksky.like" ], "summary": "Like a shout", "operationId": "app.rocksky.like.likeShout", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The unique identifier of the shout to like", "x-lexicon-format": "at-uri" } } } } } } } }, "/app.rocksky.like.likeSong": { "post": { "tags": [ "app.rocksky.like" ], "summary": "Like a song", "operationId": "app.rocksky.like.likeSong", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The unique identifier of the song to like", "x-lexicon-format": "at-uri" } } } } } } } }, "/app.rocksky.mirror.getMirrorSources": { "get": { "tags": [ "app.rocksky.mirror" ], "summary": "Get the authenticated user's scrobble mirror sources (Last.fm, ListenBrainz, Teal.fm).", "operationId": "app.rocksky.mirror.getMirrorSources", "security": [ {}, { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "sources": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.mirror.defs__mirrorSourceView" } } }, "required": [ "sources" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Without authentication, returns the default disabled provider settings." } }, "/app.rocksky.mirror.putMirrorSource": { "post": { "tags": [ "app.rocksky.mirror" ], "summary": "Upsert a mirror source for the authenticated user. Toggling `enabled` notifies the mirror process over NATS so it can start/stop the per-user task without a restart.", "operationId": "app.rocksky.mirror.putMirrorSource", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.mirror.defs__mirrorSourceView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "provider": { "type": "string", "description": "One of: lastfm, listenbrainz, tealfm" }, "enabled": { "type": "boolean", "description": "Enable or disable mirroring for this provider." }, "pushEnabled": { "type": "boolean", "description": "Enable or disable mirroring Rocksky scrobbles out to this provider. teal.fm only." }, "externalUsername": { "type": "string", "description": "External username (Last.fm / ListenBrainz). Required when enabling those providers. Ignored for Teal.fm." }, "apiKey": { "type": "string", "description": "API key / token to be encrypted at rest. Omit to leave the existing key unchanged. Pass an empty string to clear it." } }, "required": [ "provider" ] } } } } } }, "/app.rocksky.notification.getUnreadCount": { "get": { "tags": [ "app.rocksky.notification" ], "summary": "Get the number of unread notifications for the authenticated user.", "operationId": "app.rocksky.notification.getUnreadCount", "security": [ {}, { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "count": { "type": "integer", "description": "The number of unread notifications." } }, "required": [ "count" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Authenticate to retrieve your unread count. Without a token, returns zero." } }, "/app.rocksky.notification.listNotifications": { "get": { "tags": [ "app.rocksky.notification" ], "summary": "List notifications for the authenticated user, most recent first.", "operationId": "app.rocksky.notification.listNotifications", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "limit", "in": "query", "required": false, "schema": { "type": "integer", "default": 30, "minimum": 1, "maximum": 100 } }, { "name": "cursor", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "notifications": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.notification.defs__notificationView" } }, "unreadCount": { "type": "integer", "description": "The number of unread notifications." }, "cursor": { "type": "string", "description": "A cursor value to pass to subsequent calls to get the next page of results." } }, "required": [ "notifications", "unreadCount" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Authenticate to retrieve your notifications. Without a token, returns an empty list and zero unread count." } }, "/app.rocksky.notification.updateSeen": { "post": { "tags": [ "app.rocksky.notification" ], "summary": "Mark notifications as viewed. When no ids are provided, marks all of the authenticated user's notifications as viewed.", "operationId": "app.rocksky.notification.updateSeen", "security": [ {}, { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "unreadCount": { "type": "integer", "description": "The number of unread notifications remaining." } }, "required": [ "unreadCount" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Authentication is needed to change notifications. Without a token, makes no changes and returns zero unread count.", "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "ids": { "type": "array", "items": { "type": "string" }, "description": "The ids of the notifications to mark as viewed. Omit to mark all." } } } } } } } }, "/app.rocksky.player.addItemsToQueue": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Add items to the player's queue", "operationId": "app.rocksky.player.addItemsToQueue", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "items", "in": "query", "required": true, "schema": { "type": "array", "items": { "type": "string", "description": "List of file identifiers to add to the queue" } }, "style": "form", "explode": true }, { "name": "position", "in": "query", "required": false, "description": "Position in the queue to insert the items at, defaults to the end if not specified", "schema": { "type": "integer", "description": "Position in the queue to insert the items at, defaults to the end if not specified" } }, { "name": "shuffle", "in": "query", "required": false, "description": "Whether to shuffle the added items in the queue", "schema": { "type": "boolean", "description": "Whether to shuffle the added items in the queue" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.getCurrentlyPlaying": { "get": { "tags": [ "app.rocksky.player" ], "summary": "Get the currently playing track", "operationId": "app.rocksky.player.getCurrentlyPlaying", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "actor", "in": "query", "required": false, "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", "schema": { "type": "string", "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.player.defs__currentlyPlayingViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.getPlaybackQueue": { "get": { "tags": [ "app.rocksky.player" ], "summary": "Retrieve the current playback queue", "operationId": "app.rocksky.player.getPlaybackQueue", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.player.defs__playbackQueueViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.next": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Play the next track in the queue", "operationId": "app.rocksky.player.next", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.pause": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Pause the currently playing track", "operationId": "app.rocksky.player.pause", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.play": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Resume playback of the currently paused track", "operationId": "app.rocksky.player.play", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.playDirectory": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Play all tracks in a directory", "operationId": "app.rocksky.player.playDirectory", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "directoryId", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "shuffle", "in": "query", "required": false, "schema": { "type": "boolean" } }, { "name": "recurse", "in": "query", "required": false, "schema": { "type": "boolean" } }, { "name": "position", "in": "query", "required": false, "schema": { "type": "integer" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.playFile": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Play a specific audio file", "operationId": "app.rocksky.player.playFile", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "fileId", "in": "query", "required": true, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.previous": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Play the previous track in the queue", "operationId": "app.rocksky.player.previous", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.player.seek": { "post": { "tags": [ "app.rocksky.player" ], "summary": "Seek to a specific position in the currently playing track", "operationId": "app.rocksky.player.seek", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "playerId", "in": "query", "required": false, "schema": { "type": "string" } }, { "name": "position", "in": "query", "required": true, "description": "The position in seconds to seek to", "schema": { "type": "integer", "description": "The position in seconds to seek to" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.playlist.addSongs": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Add songs to a playlist. Publishes one app.rocksky.playlist.song record per song to the caller's repo; only the playlist owner may do so.", "operationId": "app.rocksky.playlist.addSongs", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to add the songs to", "schema": { "type": "string", "description": "The URI of the playlist to add the songs to", "x-lexicon-format": "at-uri" } }, { "name": "songs", "in": "query", "required": true, "description": "AT-URIs of the app.rocksky.song records to add", "schema": { "type": "array", "items": { "type": "string", "x-lexicon-format": "at-uri" }, "description": "AT-URIs of the app.rocksky.song records to add" }, "style": "form", "explode": true } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "uris": { "type": "array", "items": { "type": "string", "x-lexicon-format": "at-uri" }, "description": "AT-URIs of the created app.rocksky.playlist.song records" } }, "required": [ "uris" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.playlist.createPlaylist": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Create a new playlist", "operationId": "app.rocksky.playlist.createPlaylist", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "name", "in": "query", "required": true, "description": "The name of the playlist", "schema": { "type": "string", "description": "The name of the playlist" } }, { "name": "description", "in": "query", "required": false, "description": "A brief description of the playlist", "schema": { "type": "string", "description": "A brief description of the playlist" } }, { "name": "pictureUrl", "in": "query", "required": false, "description": "The URL of the cover image for the playlist", "schema": { "type": "string", "description": "The URL of the cover image for the playlist", "format": "uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The AT-URI of the created app.rocksky.playlist record.", "x-lexicon-format": "at-uri" }, "cid": { "type": "string", "description": "The CID of the created app.rocksky.playlist record." } }, "required": [ "uri", "cid" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.playlist.getPlaylist": { "get": { "tags": [ "app.rocksky.playlist" ], "summary": "Retrieve a playlist by its ID", "operationId": "app.rocksky.playlist.getPlaylist", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to retrieve.", "schema": { "type": "string", "description": "The URI of the playlist to retrieve.", "x-lexicon-format": "at-uri" } }, { "name": "filter", "in": "query", "required": false, "description": "RSQL filter expression applied to the playlist's tracks, e.g. `artist==\"Daft Punk\";duration=gt=200000`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: title, artist, album, albumArtist, genre, composer, label, duration, trackNumber, discNumber, mbId, isrc, sha256, uri, albumUri, artistUri, addedAt", "schema": { "type": "string", "description": "RSQL filter expression applied to the playlist's tracks, e.g. `artist==\"Daft Punk\";duration=gt=200000`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: title, artist, album, albumArtist, genre, composer, label, duration, trackNumber, discNumber, mbId, isrc, sha256, uri, albumUri, artistUri, addedAt", "maxLength": 2048 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.playlist.defs__playlistViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.playlist.getPlaylists": { "get": { "tags": [ "app.rocksky.playlist" ], "summary": "Retrieve a list of playlists", "operationId": "app.rocksky.playlist.getPlaylists", "security": [], "parameters": [ { "name": "limit", "in": "query", "required": false, "description": "The maximum number of playlists to return.", "schema": { "type": "integer", "description": "The maximum number of playlists to return." } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination, used to skip a number of playlists.", "schema": { "type": "integer", "description": "The offset for pagination, used to skip a number of playlists." } }, { "name": "filter", "in": "query", "required": false, "description": "RSQL filter expression, e.g. `name==\"Road trip*\";track.artist==\"Daft Punk\"`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: name, title, description, uri, spotifyLink, tidalLink, appleMusicLink, createdAt, updatedAt, curatorDid, curatorHandle, curatorName. The `track.title`, `track.artist`, `track.album` and `track.albumArtist` selectors match the playlist's contents, returning playlists that contain a matching track; several `track.*` terms joined with `;` must all be satisfied by the same track.", "schema": { "type": "string", "description": "RSQL filter expression, e.g. `name==\"Road trip*\";track.artist==\"Daft Punk\"`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: name, title, description, uri, spotifyLink, tidalLink, appleMusicLink, createdAt, updatedAt, curatorDid, curatorHandle, curatorName. The `track.title`, `track.artist`, `track.album` and `track.albumArtist` selectors match the playlist's contents, returning playlists that contain a matching track; several `track.*` terms joined with `;` must all be satisfied by the same track.", "maxLength": 2048 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "playlists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.playlist.defs__playlistViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.playlist.insertDirectory": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Insert a directory into a playlist", "operationId": "app.rocksky.playlist.insertDirectory", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to start", "schema": { "type": "string", "description": "The URI of the playlist to start", "x-lexicon-format": "at-uri" } }, { "name": "directory", "in": "query", "required": true, "description": "The directory (id) to insert into the playlist", "schema": { "type": "string", "description": "The directory (id) to insert into the playlist" } }, { "name": "position", "in": "query", "required": false, "description": "The position in the playlist to insert the directory at, if not specified, the directory will be appended", "schema": { "type": "integer", "description": "The position in the playlist to insert the directory at, if not specified, the directory will be appended" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.playlist.insertFiles": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Insert files into a playlist", "operationId": "app.rocksky.playlist.insertFiles", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to start", "schema": { "type": "string", "description": "The URI of the playlist to start", "x-lexicon-format": "at-uri" } }, { "name": "files", "in": "query", "required": true, "schema": { "type": "array", "items": { "type": "string", "description": "List of file (id) to insert into the playlist" } }, "style": "form", "explode": true }, { "name": "position", "in": "query", "required": false, "description": "The position in the playlist to insert the files at, if not specified, files will be appended", "schema": { "type": "integer", "description": "The position in the playlist to insert the files at, if not specified, files will be appended" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.playlist.removePlaylist": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Remove a playlist", "operationId": "app.rocksky.playlist.removePlaylist", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to remove", "schema": { "type": "string", "description": "The URI of the playlist to remove", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.playlist.removeTrack": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Remove one track from a playlist. Deletes the app.rocksky.playlist.song record that put it there, which only the repo that added it can do. Prefer `index`: a song can sit in a playlist more than once, and `songUri` alone cannot say which copy to drop.", "operationId": "app.rocksky.playlist.removeTrack", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to remove the track from", "schema": { "type": "string", "description": "The URI of the playlist to remove the track from", "x-lexicon-format": "at-uri" } }, { "name": "songUri", "in": "query", "required": false, "description": "The URI of the app.rocksky.song record to remove. Removes every copy of it; pass `index` instead to remove one.", "schema": { "type": "string", "description": "The URI of the app.rocksky.song record to remove. Removes every copy of it; pass `index` instead to remove one.", "x-lexicon-format": "at-uri" } }, { "name": "index", "in": "query", "required": false, "description": "0-based position of the entry to remove, in the order getPlaylist returns.", "schema": { "type": "integer", "description": "0-based position of the entry to remove, in the order getPlaylist returns.", "minimum": 0 } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.playlist.startPlaylist": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Start a playlist", "operationId": "app.rocksky.playlist.startPlaylist", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to start", "schema": { "type": "string", "description": "The URI of the playlist to start", "x-lexicon-format": "at-uri" } }, { "name": "shuffle", "in": "query", "required": false, "description": "Whether to shuffle the playlist when starting it", "schema": { "type": "boolean", "description": "Whether to shuffle the playlist when starting it" } }, { "name": "position", "in": "query", "required": false, "description": "The position in the playlist to start from, if not specified, starts from the beginning", "schema": { "type": "integer", "description": "The position in the playlist to start from, if not specified, starts from the beginning" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "The current handler contains placeholder logic; a successful response does not guarantee the requested operation was performed.", "x-implementation-status": "placeholder" } }, "/app.rocksky.playlist.updatePlaylist": { "post": { "tags": [ "app.rocksky.playlist" ], "summary": "Update a playlist's metadata. Rewrites the app.rocksky.playlist record in place; only the owner may do so.", "operationId": "app.rocksky.playlist.updatePlaylist", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the playlist to update", "schema": { "type": "string", "description": "The URI of the playlist to update", "x-lexicon-format": "at-uri" } }, { "name": "name", "in": "query", "required": false, "description": "The new name of the playlist", "schema": { "type": "string", "description": "The new name of the playlist", "minLength": 1, "maxLength": 512 } }, { "name": "description", "in": "query", "required": false, "description": "The new description of the playlist", "schema": { "type": "string", "description": "The new description of the playlist", "maxLength": 256 } }, { "name": "pictureUrl", "in": "query", "required": false, "description": "The new cover image URL for the playlist", "schema": { "type": "string", "description": "The new cover image URL for the playlist", "format": "uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "uri": { "type": "string", "description": "The AT-URI of the updated app.rocksky.playlist record.", "x-lexicon-format": "at-uri" }, "cid": { "type": "string", "description": "The CID of the updated app.rocksky.playlist record." } }, "required": [ "uri", "cid" ] } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.rockbox.getAudioSettings": { "get": { "tags": [ "app.rocksky.rockbox" ], "summary": "Get Rockbox audio settings. If `did` is provided the request is public; otherwise an auth token is required and the caller's own settings are returned.", "operationId": "app.rocksky.rockbox.getAudioSettings", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "DID or handle of the user whose settings to fetch. Required for unauthenticated requests.", "schema": { "type": "string", "description": "DID or handle of the user whose settings to fetch. Required for unauthenticated requests.", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__settingsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "description": "Supply did for public lookup, or authenticate to use your own DID." } }, "/app.rocksky.rockbox.putAudioSettings": { "post": { "tags": [ "app.rocksky.rockbox" ], "summary": "Upsert the authenticated user's Rockbox audio settings. Only provided sections are merged; omitted sections are left unchanged.", "operationId": "app.rocksky.rockbox.putAudioSettings", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__settingsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "crossfade": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__crossfadeSettings", "description": "Crossfade settings to apply." }, "equalizer": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__equalizerSettings", "description": "Equalizer settings to apply." }, "replayGain": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__replayGainSettings", "description": "Replay gain settings to apply." }, "tone": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__toneSettings", "description": "Tone control settings to apply." } } } } } } } }, "/app.rocksky.scrobble.createScrobble": { "post": { "tags": [ "app.rocksky.scrobble" ], "summary": "Create a new scrobble", "operationId": "app.rocksky.scrobble.createScrobble", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.scrobble.defs__scrobbleViewBasic" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "title": { "type": "string", "description": "The title of the track being scrobbled" }, "artist": { "type": "string", "description": "The artist of the track being scrobbled" }, "album": { "type": "string", "description": "The album of the track being scrobbled" }, "duration": { "type": "integer", "description": "The duration of the track in milliseconds (e.g., 240000 for 4 minutes)" }, "mbId": { "type": "string", "description": "The MusicBrainz ID of the track, if available" }, "isrc": { "type": "string", "description": "The International Standard Recording Code (ISRC) of the track, if available" }, "albumArt": { "type": "string", "description": "The URL of the album art for the track", "format": "uri" }, "trackNumber": { "type": "integer", "description": "The track number of the track in the album" }, "releaseDate": { "type": "string", "description": "The release date of the track, formatted as YYYY-MM-DD" }, "year": { "type": "integer", "description": "The year the track was released" }, "discNumber": { "type": "integer", "description": "The disc number of the track in the album, if applicable" }, "lyrics": { "type": "string", "description": "The lyrics of the track, if available" }, "composer": { "type": "string", "description": "The composer of the track, if available" }, "copyrightMessage": { "type": "string", "description": "The copyright message for the track, if available" }, "label": { "type": "string", "description": "The record label of the track, if available" }, "artistPicture": { "type": "string", "description": "The URL of the artist's picture, if available", "format": "uri" }, "spotifyLink": { "type": "string", "description": "The Spotify link for the track, if available", "format": "uri" }, "lastfmLink": { "type": "string", "description": "The Last.fm link for the track, if available", "format": "uri" }, "tidalLink": { "type": "string", "description": "The Tidal link for the track, if available", "format": "uri" }, "appleMusicLink": { "type": "string", "description": "The Apple Music link for the track, if available", "format": "uri" }, "youtubeLink": { "type": "string", "description": "The Youtube link for the track, if available", "format": "uri" }, "deezerLink": { "type": "string", "description": "The Deezer link for the track, if available", "format": "uri" }, "timestamp": { "type": "integer", "description": "The timestamp of the scrobble in seconds since epoch (Unix timestamp)" } }, "required": [ "title", "artist" ] } } } } } }, "/app.rocksky.scrobble.getScrobble": { "get": { "tags": [ "app.rocksky.scrobble" ], "summary": "Get a scrobble by its unique identifier", "operationId": "app.rocksky.scrobble.getScrobble", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The unique identifier of the scrobble", "schema": { "type": "string", "description": "The unique identifier of the scrobble", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.scrobble.defs__scrobbleViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.scrobble.getScrobbles": { "get": { "tags": [ "app.rocksky.scrobble" ], "summary": "Get scrobbles all scrobbles", "operationId": "app.rocksky.scrobble.getScrobbles", "security": [], "parameters": [ { "name": "did", "in": "query", "required": false, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "following", "in": "query", "required": false, "description": "If true, only return scrobbles from actors the viewer is following.", "schema": { "type": "boolean", "description": "If true, only return scrobbles from actors the viewer is following." } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of scrobbles to return", "schema": { "type": "integer", "description": "The maximum number of scrobbles to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "filter", "in": "query", "required": false, "description": "RSQL filter expression, e.g. `track.artist==\"Daft Punk\";date=ge=2025-01-01`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: uri, date, timestamp, title, artist, album, track.title, track.artist, track.album, track.albumArtist, track.genre, track.duration, track.isrc, track.mbId, user.did, user.handle, user.displayName, artist.name, artist.genres", "schema": { "type": "string", "description": "RSQL filter expression, e.g. `track.artist==\"Daft Punk\";date=ge=2025-01-01`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: uri, date, timestamp, title, artist, album, track.title, track.artist, track.album, track.albumArtist, track.genre, track.duration, track.isrc, track.mbId, user.did, user.handle, user.displayName, artist.name, artist.genres", "maxLength": 2048 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "scrobbles": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.scrobble.defs__scrobbleViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.shout.createShout": { "post": { "tags": [ "app.rocksky.shout" ], "summary": "Create a new shout", "operationId": "app.rocksky.shout.createShout", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "message": { "type": "string", "description": "The content of the shout", "minLength": 1 } } } } } } } }, "/app.rocksky.shout.getAlbumShouts": { "get": { "tags": [ "app.rocksky.shout" ], "summary": "Get shouts for an album", "operationId": "app.rocksky.shout.getAlbumShouts", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The unique identifier of the album to retrieve shouts for", "schema": { "type": "string", "description": "The unique identifier of the album to retrieve shouts for", "x-lexicon-format": "at-uri" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of shouts to return", "schema": { "type": "integer", "description": "The maximum number of shouts to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The number of shouts to skip before starting to collect the result set", "schema": { "type": "integer", "description": "The number of shouts to skip before starting to collect the result set", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "shouts": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.shout.getArtistShouts": { "get": { "tags": [ "app.rocksky.shout" ], "summary": "Get shouts for an artist", "operationId": "app.rocksky.shout.getArtistShouts", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the artist to retrieve shouts for", "schema": { "type": "string", "description": "The URI of the artist to retrieve shouts for", "x-lexicon-format": "at-uri" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of shouts to return", "schema": { "type": "integer", "description": "The maximum number of shouts to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The number of shouts to skip before starting to collect the result set", "schema": { "type": "integer", "description": "The number of shouts to skip before starting to collect the result set", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "shouts": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.shout.getProfileShouts": { "get": { "tags": [ "app.rocksky.shout" ], "summary": "Get the shouts of an actor's profile", "operationId": "app.rocksky.shout.getProfileShouts", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the actor", "schema": { "type": "string", "description": "The DID or handle of the actor", "x-lexicon-format": "at-identifier" } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of shouts to return", "schema": { "type": "integer", "description": "The maximum number of shouts to return", "minimum": 1 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "shouts": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.shout.getShoutReplies": { "get": { "tags": [ "app.rocksky.shout" ], "summary": "Get replies to a shout", "operationId": "app.rocksky.shout.getShoutReplies", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the shout to retrieve replies for", "schema": { "type": "string", "description": "The URI of the shout to retrieve replies for", "x-lexicon-format": "at-uri" } }, { "name": "limit", "in": "query", "required": false, "description": "The maximum number of shouts to return", "schema": { "type": "integer", "description": "The maximum number of shouts to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The number of shouts to skip before starting to collect the result set", "schema": { "type": "integer", "description": "The number of shouts to skip before starting to collect the result set", "minimum": 0 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "shouts": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.shout.getTrackShouts": { "get": { "tags": [ "app.rocksky.shout" ], "summary": "Get all shouts for a specific track", "operationId": "app.rocksky.shout.getTrackShouts", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the track to retrieve shouts for", "schema": { "type": "string", "description": "The URI of the track to retrieve shouts for", "x-lexicon-format": "at-uri" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "shouts": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.shout.removeShout": { "post": { "tags": [ "app.rocksky.shout" ], "summary": "Remove a shout by its ID", "operationId": "app.rocksky.shout.removeShout", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "id", "in": "query", "required": true, "description": "The ID of the shout to be removed", "schema": { "type": "string", "description": "The ID of the shout to be removed" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.shout.replyShout": { "post": { "tags": [ "app.rocksky.shout" ], "summary": "Reply to a shout", "operationId": "app.rocksky.shout.replyShout", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "shoutId": { "type": "string", "description": "The unique identifier of the shout to reply to" }, "message": { "type": "string", "description": "The content of the reply", "minLength": 1 } }, "required": [ "shoutId", "message" ] } } } } } }, "/app.rocksky.shout.reportShout": { "post": { "tags": [ "app.rocksky.shout" ], "summary": "Report a shout for moderation", "operationId": "app.rocksky.shout.reportShout", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.shout.defs__shoutView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "shoutId": { "type": "string", "description": "The unique identifier of the shout to report" }, "reason": { "type": "string", "description": "The reason for reporting the shout", "minLength": 1 } }, "required": [ "shoutId" ] } } } } } }, "/app.rocksky.song.createSong": { "post": { "tags": [ "app.rocksky.song" ], "summary": "Create a new song", "operationId": "app.rocksky.song.createSong", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } }, "requestBody": { "required": true, "content": { "application/json": { "schema": { "type": "object", "properties": { "title": { "type": "string", "description": "The title of the song" }, "artist": { "type": "string", "description": "The artist of the song" }, "albumArtist": { "type": "string", "description": "The album artist of the song, if different from the main artist" }, "album": { "type": "string", "description": "The album of the song, if applicable" }, "duration": { "type": "integer", "description": "The duration of the song in milliseconds" }, "mbId": { "type": "string", "description": "The MusicBrainz ID of the song, if available" }, "isrc": { "type": "string", "description": "The International Standard Recording Code (ISRC) of the song, if available" }, "albumArt": { "type": "string", "description": "The URL of the album art for the song", "format": "uri" }, "trackNumber": { "type": "integer", "description": "The track number of the song in the album, if applicable" }, "releaseDate": { "type": "string", "description": "The release date of the song, formatted as YYYY-MM-DD" }, "year": { "type": "integer", "description": "The year the song was released" }, "discNumber": { "type": "integer", "description": "The disc number of the song in the album, if applicable" }, "lyrics": { "type": "string", "description": "The lyrics of the song, if available" } }, "required": [ "title", "artist", "album", "albumArtist" ] } } } } } }, "/app.rocksky.song.getSong": { "get": { "tags": [ "app.rocksky.song" ], "summary": "Get a song by its uri, MusicBrainz ID, or ISRC", "operationId": "app.rocksky.song.getSong", "security": [ {}, { "Bearer": [] } ], "parameters": [ { "name": "uri", "in": "query", "required": false, "description": "The AT-URI of the song to retrieve", "schema": { "type": "string", "description": "The AT-URI of the song to retrieve", "x-lexicon-format": "at-uri" } }, { "name": "mbid", "in": "query", "required": false, "description": "The MusicBrainz ID of the song to retrieve", "schema": { "type": "string", "description": "The MusicBrainz ID of the song to retrieve" } }, { "name": "isrc", "in": "query", "required": false, "description": "The International Standard Recording Code (ISRC) of the song to retrieve", "schema": { "type": "string", "description": "The International Standard Recording Code (ISRC) of the song to retrieve" } }, { "name": "spotifyId", "in": "query", "required": false, "description": "The Spotify track ID of the song to retrieve (resolved internally to the Spotify track URL)", "schema": { "type": "string", "description": "The Spotify track ID of the song to retrieve (resolved internally to the Spotify track URL)" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.song.getSongRecentListeners": { "get": { "tags": [ "app.rocksky.song" ], "summary": "Get song recent listeners ordered by most recent scrobble", "operationId": "app.rocksky.song.getSongRecentListeners", "security": [], "parameters": [ { "name": "uri", "in": "query", "required": true, "description": "The URI of the song to retrieve recent listeners from", "schema": { "type": "string", "description": "The URI of the song to retrieve recent listeners from", "x-lexicon-format": "at-uri" } }, { "name": "offset", "in": "query", "required": false, "description": "Number of items to skip before returning results", "schema": { "type": "integer", "description": "Number of items to skip before returning results" } }, { "name": "limit", "in": "query", "required": false, "description": "Maximum number of results to return", "schema": { "type": "integer", "description": "Maximum number of results to return" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "listeners": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__recentListenerView" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.song.getSongs": { "get": { "tags": [ "app.rocksky.song" ], "summary": "Get songs", "operationId": "app.rocksky.song.getSongs", "security": [], "parameters": [ { "name": "limit", "in": "query", "required": false, "description": "The maximum number of songs to return", "schema": { "type": "integer", "description": "The maximum number of songs to return", "minimum": 1 } }, { "name": "offset", "in": "query", "required": false, "description": "The offset for pagination", "schema": { "type": "integer", "description": "The offset for pagination", "minimum": 0 } }, { "name": "genre", "in": "query", "required": false, "description": "The genre to filter artists by", "schema": { "type": "string", "description": "The genre to filter artists by" } }, { "name": "mbid", "in": "query", "required": false, "description": "Filter songs by MusicBrainz ID", "schema": { "type": "string", "description": "Filter songs by MusicBrainz ID" } }, { "name": "isrc", "in": "query", "required": false, "description": "Filter songs by International Standard Recording Code (ISRC)", "schema": { "type": "string", "description": "Filter songs by International Standard Recording Code (ISRC)" } }, { "name": "spotifyId", "in": "query", "required": false, "description": "Filter songs by Spotify track ID (resolved internally to the Spotify track URL)", "schema": { "type": "string", "description": "Filter songs by Spotify track ID (resolved internally to the Spotify track URL)" } }, { "name": "filter", "in": "query", "required": false, "description": "RSQL filter expression, e.g. `artist==\"Daft Punk\";duration=gt=200000`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: title, artist, album, albumArtist, genre, composer, label, duration, trackNumber, discNumber, mbId, isrc, sha256, uri, albumUri, artistUri, createdAt", "schema": { "type": "string", "description": "RSQL filter expression, e.g. `artist==\"Daft Punk\";duration=gt=200000`. Supports ==, !=, <, <=, >, >=, =in=, =out=, and `;`/`and`, `,`/`or` combinators, `*` wildcards in string values. Filterable fields: title, artist, album, albumArtist, genre, composer, label, duration, trackNumber, discNumber, mbId, isrc, sha256, uri, albumUri, artistUri, createdAt", "maxLength": 2048 } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "type": "object", "properties": { "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } } } } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.song.matchSong": { "get": { "tags": [ "app.rocksky.song" ], "summary": "Matches a song against Rocksky’s music database and external metadata providers to resolve the best canonical track, artist, and album. Completed lookups return HTTP 200 in the existing songViewDetailed format. When multiple recordings remain, the highest-ranked accepted candidate supplies the song fields; external alternatives remain in matches. When no candidate is accepted, returns an empty matches array without song fields. Supply a known isrc or mbId to anchor a recording.", "operationId": "app.rocksky.song.matchSong", "security": [], "parameters": [ { "name": "title", "in": "query", "required": true, "description": "The title of the song to retrieve", "schema": { "type": "string", "description": "The title of the song to retrieve" } }, { "name": "artist", "in": "query", "required": true, "description": "The artist of the song to retrieve", "schema": { "type": "string", "description": "The artist of the song to retrieve" } }, { "name": "album", "in": "query", "required": false, "description": "Optional album title — only candidates matching this album after normalization are accepted, including when an explicit identifier is supplied", "schema": { "type": "string", "description": "Optional album title — only candidates matching this album after normalization are accepted, including when an explicit identifier is supplied" } }, { "name": "mbId", "in": "query", "required": false, "description": "Optional MusicBrainz recording ID to anchor the match", "schema": { "type": "string", "description": "Optional MusicBrainz recording ID to anchor the match" } }, { "name": "isrc", "in": "query", "required": false, "description": "Optional International Standard Recording Code (ISRC) to anchor the match", "schema": { "type": "string", "description": "Optional International Standard Recording Code (ISRC) to anchor the match" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.spotify.getCurrentlyPlaying": { "get": { "tags": [ "app.rocksky.spotify" ], "summary": "Get the currently playing track", "operationId": "app.rocksky.spotify.getCurrentlyPlaying", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "actor", "in": "query", "required": false, "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", "schema": { "type": "string", "description": "Handle or DID of the actor to retrieve the currently playing track for. If not provided, defaults to the current user.", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.player.defs__currentlyPlayingViewDetailed" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.spotify.next": { "post": { "tags": [ "app.rocksky.spotify" ], "summary": "Play the next track in the queue", "operationId": "app.rocksky.spotify.next", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.spotify.pause": { "post": { "tags": [ "app.rocksky.spotify" ], "summary": "Pause the currently playing track", "operationId": "app.rocksky.spotify.pause", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.spotify.play": { "post": { "tags": [ "app.rocksky.spotify" ], "summary": "Resume playback of the currently paused track", "operationId": "app.rocksky.spotify.play", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.spotify.previous": { "post": { "tags": [ "app.rocksky.spotify" ], "summary": "Play the previous track in the queue", "operationId": "app.rocksky.spotify.previous", "security": [ { "Bearer": [] } ], "parameters": [], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.spotify.seek": { "post": { "tags": [ "app.rocksky.spotify" ], "summary": "Seek to a specific position in the currently playing track", "operationId": "app.rocksky.spotify.seek", "security": [ { "Bearer": [] } ], "parameters": [ { "name": "position", "in": "query", "required": true, "description": "The position in seconds to seek to", "schema": { "type": "integer", "description": "The position in seconds to seek to" } } ], "responses": { "200": { "description": "Success" }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.stats.getGlobalStats": { "get": { "tags": [ "app.rocksky.stats" ], "summary": "Get all-time stats across all of Rocksky.", "operationId": "app.rocksky.stats.getGlobalStats", "security": [], "parameters": [], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.stats.defs__globalStatsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.stats.getStats": { "get": { "tags": [ "app.rocksky.stats" ], "summary": "stats.getStats", "operationId": "app.rocksky.stats.getStats", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the user to get stats for.", "schema": { "type": "string", "description": "The DID or handle of the user to get stats for.", "x-lexicon-format": "at-identifier" } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.stats.defs__statsView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } }, "/app.rocksky.stats.getWrapped": { "get": { "tags": [ "app.rocksky.stats" ], "summary": "Get a user's Wrapped stats for a year or a recent rolling window", "operationId": "app.rocksky.stats.getWrapped", "security": [], "parameters": [ { "name": "did", "in": "query", "required": true, "description": "The DID or handle of the user", "schema": { "type": "string", "description": "The DID or handle of the user", "x-lexicon-format": "at-identifier" } }, { "name": "year", "in": "query", "required": false, "description": "The year to get wrapped stats for (defaults to current year)", "schema": { "type": "integer", "description": "The year to get wrapped stats for (defaults to current year)", "minimum": 2000 } }, { "name": "period", "in": "query", "required": false, "description": "The window to compute stats over: a calendar year (see year), or a rolling window ending now. Defaults to year.", "schema": { "type": "string", "description": "The window to compute stats over: a calendar year (see year), or a rolling window ending now. Defaults to year.", "x-lexicon-knownValues": [ "year", "3months", "month", "2weeks", "week" ] } } ], "responses": { "200": { "description": "Success", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedView" } } } }, "400": { "description": "Invalid XRPC request or parameters.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } }, "default": { "description": "XRPC error response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/XrpcError" } } } } } } } }, "components": { "securitySchemes": { "Bearer": { "type": "http", "scheme": "bearer", "description": "Rocksky bearer token." } }, "schemas": { "XrpcError": { "type": "object", "required": [ "error" ], "properties": { "error": { "type": "string" }, "message": { "type": "string" } } }, "app.rocksky.actor.defs__profileViewDetailed": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the actor." }, "did": { "type": "string", "description": "The DID of the actor." }, "handle": { "type": "string", "description": "The handle of the actor." }, "displayName": { "type": "string", "description": "The display name of the actor." }, "avatar": { "type": "string", "description": "The URL of the actor's avatar image.", "format": "uri" }, "createdAt": { "type": "string", "description": "The date and time when the actor was created.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "The date and time when the actor was last updated.", "format": "date-time" }, "spotifyUser": { "$ref": "#/components/schemas/app.rocksky.actor.defs__responseSpotifyUserView" }, "spotifyConnected": { "type": "boolean" } } }, "app.rocksky.actor.defs__profileViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the actor." }, "did": { "type": "string", "description": "The DID of the actor." }, "handle": { "type": "string", "description": "The handle of the actor." }, "displayName": { "anyOf": [ { "type": "string", "description": "The display name of the actor." }, { "type": "null" } ] }, "avatar": { "anyOf": [ { "type": "string", "description": "The URL of the actor's avatar image.", "format": "uri" }, { "type": "null" } ] }, "createdAt": { "type": "string", "description": "The date and time when the actor was created.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "The date and time when the actor was last updated.", "format": "date-time" } } }, "app.rocksky.actor.defs__neighbourViewBasic": { "type": "object", "properties": { "userId": { "type": "string" }, "did": { "type": "string" }, "handle": { "type": "string" }, "displayName": { "type": "string" }, "avatar": { "type": "string", "description": "The URL of the actor's avatar image." }, "sharedArtistsCount": { "type": "integer", "description": "The number of artists shared with the actor." }, "topSharedArtistNames": { "type": "array", "items": { "type": "string" }, "description": "The top shared artist names with the actor." }, "topSharedArtistsDetails": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__artistViewBasic" }, "description": "The top shared artist details with the actor." }, "similarityScore": { "type": "number", "description": "Production returns shared_count / target_artist_count, a fractional ratio. Retain as an open extension because Lexicon has no float primitive." } } }, "app.rocksky.actor.defs__compatibilityViewBasic": { "type": "object", "properties": { "compatibilityLevel": { "type": "integer" }, "sharedArtists": { "type": "integer" }, "topSharedArtistNames": { "type": "array", "items": { "type": "string" } }, "topSharedDetailedArtists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.actor.defs__artistViewBasic" } }, "user1ArtistCount": { "type": "integer" }, "user2ArtistCount": { "type": "integer" }, "compatibilityPercentage": { "type": "number", "description": "Production returns a fractional numeric value. Lexicon has no floating-point primitive; retain it as an open extension." } } }, "app.rocksky.actor.defs__artistViewBasic": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "picture": { "type": "string", "format": "uri" }, "uri": { "type": "string", "x-lexicon-format": "at-uri" }, "user1Rank": { "type": "integer" }, "user2Rank": { "type": "integer" }, "weight": { "type": "number", "description": "Production returns a fractional numeric value. Lexicon has no floating-point primitive; retain it as an open extension." } } }, "app.rocksky.actor.defs__responseSpotifyUserView": { "type": "object", "properties": { "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "id": { "type": "string" }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "userId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "isBetaUser": { "type": "boolean" }, "spotifyAppId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] } } }, "app.rocksky.album.defs__albumViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the album." }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the album.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "title": { "type": "string", "description": "The title of the album." }, "artist": { "type": "string", "description": "The artist of the album." }, "artistUri": { "anyOf": [ { "type": "string", "description": "The URI of the album's artist.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "year": { "anyOf": [ { "type": "integer", "description": "The year the album was released." }, { "type": "null" } ] }, "albumArt": { "anyOf": [ { "type": "string", "description": "The URL of the album art image.", "format": "uri" }, { "type": "null" } ] }, "releaseDate": { "anyOf": [ { "type": "string", "description": "The release date of the album." }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the album." }, "playCount": { "type": "integer", "description": "The number of times the album has been played.", "minimum": 0 }, "uniqueListeners": { "type": "integer", "description": "The number of unique listeners who have played the album.", "minimum": 0 }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "discogsReleaseId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "createdAt": { "type": "string", "format": "date-time" }, "updatedAt": { "type": "string", "format": "date-time" }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } } }, "app.rocksky.album.defs__albumViewDetailed": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the album." }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the album.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "title": { "type": "string", "description": "The title of the album." }, "artist": { "type": "string", "description": "The artist of the album." }, "artistUri": { "anyOf": [ { "type": "string", "description": "The URI of the album's artist.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "year": { "anyOf": [ { "type": "integer", "description": "The year the album was released." }, { "type": "null" } ] }, "albumArt": { "anyOf": [ { "type": "string", "description": "The URL of the album art image.", "format": "uri" }, { "type": "null" } ] }, "releaseDate": { "anyOf": [ { "type": "string", "description": "The release date of the album." }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the album." }, "playCount": { "type": "integer", "description": "The number of times the album has been played.", "minimum": 0 }, "uniqueListeners": { "type": "integer", "description": "The number of unique listeners who have played the album.", "minimum": 0 }, "tags": { "type": "array", "items": { "type": "string" } }, "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } }, "discogs": { "$ref": "#/components/schemas/app.rocksky.album.defs__discogsView" }, "createdAt": { "type": "string" }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "discogsReleaseId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "updatedAt": { "type": "string", "format": "date-time" }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } } }, "app.rocksky.album.defs__discogsView": { "type": "object", "properties": { "releaseId": { "type": "integer", "description": "The Discogs release ID." }, "masterId": { "type": "integer", "description": "The Discogs master ID, shared by every edition of the release." }, "title": { "type": "string", "description": "The release title as Discogs spells it." }, "artist": { "type": "string", "description": "The release artist as Discogs credits it." }, "albumArt": { "type": "string", "description": "The primary release image on Discogs.", "format": "uri" }, "year": { "type": "integer", "description": "The year this pressing was released." }, "originalYear": { "type": "integer", "description": "The year the release first came out, from its master." }, "releaseDate": { "type": "string", "description": "The release date of this pressing." }, "country": { "type": "string", "description": "The country this pressing was released in." }, "label": { "type": "string", "description": "The record label." }, "catalogNumber": { "type": "string", "description": "The label's catalog number for this pressing." }, "barcode": { "type": "string", "description": "The barcode printed on this pressing." }, "formats": { "type": "array", "items": { "type": "string" }, "description": "The physical or digital formats of this pressing." }, "genres": { "type": "array", "items": { "type": "string" }, "description": "The Discogs genres of the release." }, "styles": { "type": "array", "items": { "type": "string" }, "description": "The Discogs styles of the release." }, "url": { "type": "string", "description": "The release page on Discogs.", "format": "uri" }, "score": { "type": "integer", "description": "Confidence of the match that produced this release, from 0 to 100.", "minimum": 0, "maximum": 100 }, "credits": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__discogsCreditView" }, "description": "Performance and production credits for the release." }, "tracklist": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__discogsTrackView" }, "description": "The release tracklist." }, "labels": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__discogsLabelView" }, "description": "Every label and company on the release." }, "identifiers": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__discogsIdentifierView" }, "description": "Every identifier printed on the release." }, "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.album.defs__discogsArtistView" }, "description": "Every artist credited on the release." }, "master": { "$ref": "#/components/schemas/app.rocksky.album.defs__discogsMasterView" } }, "description": "Release metadata matched on Discogs for this album." }, "app.rocksky.album.defs__discogsCreditView": { "type": "object", "properties": { "artistId": { "type": "integer", "description": "The Discogs artist ID, when the credit is linked to one." }, "name": { "type": "string", "description": "The credited name." }, "role": { "type": "string", "description": "The role as Discogs words it, such as \"Written-By\" or \"Mixed By, Engineer\"." }, "tracks": { "type": "string", "description": "The track positions the credit applies to, absent when it covers the whole release." } }, "description": "One performance or production credit from Discogs." }, "app.rocksky.album.defs__discogsTrackView": { "type": "object", "properties": { "position": { "type": "string", "description": "The position Discogs prints, such as 7, 2-04 or C2." }, "type": { "type": "string", "description": "The entry kind: track, heading or index." }, "title": { "type": "string", "description": "The track title." }, "duration": { "type": "string", "description": "The duration as printed, m:ss." }, "durationMs": { "type": "integer", "description": "The duration in milliseconds." }, "discNumber": { "type": "integer", "description": "The disc the track sits on, parsed from the position." }, "trackNumber": { "type": "integer", "description": "The track number, side-relative for vinyl." } }, "description": "One entry of the release tracklist, as printed on it." }, "app.rocksky.album.defs__discogsLabelView": { "type": "object", "properties": { "labelId": { "type": "integer", "description": "The Discogs label ID." }, "name": { "type": "string", "description": "The label or company name." }, "catalogNumber": { "type": "string", "description": "The catalog number this label gave the release." }, "kind": { "type": "string", "description": "Either label or company." }, "entityType": { "type": "string", "description": "The role for a company, such as Pressed By or Distributed By." } }, "description": "A label or company involved in the release." }, "app.rocksky.album.defs__discogsIdentifierView": { "type": "object", "properties": { "type": { "type": "string", "description": "The identifier type as Discogs names it." }, "value": { "type": "string", "description": "The identifier itself." }, "description": { "type": "string", "description": "What the identifier applies to, when Discogs says." } }, "description": "An identifier printed on the release: barcode, matrix / runout, label code, rights society." }, "app.rocksky.album.defs__discogsArtistView": { "type": "object", "properties": { "artistId": { "type": "integer", "description": "The Discogs artist ID." }, "name": { "type": "string", "description": "The artist name." }, "anv": { "type": "string", "description": "The name as credited on this release, when it differs." }, "joinPhrase": { "type": "string", "description": "What separates this artist from the next in the credit." }, "role": { "type": "string", "description": "The role, when the release gives one." } }, "description": "An artist credited on the release itself." }, "app.rocksky.album.defs__discogsMasterView": { "type": "object", "properties": { "masterId": { "type": "integer", "description": "The Discogs master ID." }, "title": { "type": "string", "description": "The master title." }, "artist": { "type": "string", "description": "The master artist credit." }, "year": { "type": "integer", "description": "The year the release first came out." }, "mainReleaseId": { "type": "integer", "description": "The release Discogs treats as the canonical edition." }, "url": { "type": "string", "description": "The master page on Discogs.", "format": "uri" }, "genres": { "type": "array", "items": { "type": "string" }, "description": "The Discogs genres of the master." }, "styles": { "type": "array", "items": { "type": "string" }, "description": "The Discogs styles of the master." } }, "description": "The master that groups every edition of the release." }, "app.rocksky.apikey.defs__apiKeyView": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the API key." }, "name": { "type": "string", "description": "The name of the API key." }, "description": { "type": "string", "description": "A description for the API key." }, "createdAt": { "type": "string", "description": "The date and time when the API key was created.", "format": "date-time" } } }, "app.rocksky.artist.defs__artistViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the artist." }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the artist.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "name": { "type": "string", "description": "The name of the artist." }, "picture": { "anyOf": [ { "type": "string", "description": "The picture of the artist." }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the artist." }, "playCount": { "type": "integer", "description": "The number of times the artist has been played.", "minimum": 0 }, "uniqueListeners": { "type": "integer", "description": "The number of unique listeners who have played the artist.", "minimum": 0 }, "tags": { "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "biography": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "born": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "bornIn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "died": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "genres": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } } }, "app.rocksky.artist.defs__artistViewDetailed": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the artist." }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the artist.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "name": { "type": "string", "description": "The name of the artist." }, "picture": { "anyOf": [ { "type": "string", "description": "The picture of the artist." }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the artist." }, "playCount": { "type": "integer", "description": "The number of times the artist has been played.", "minimum": 0 }, "uniqueListeners": { "type": "integer", "description": "The number of unique listeners who have played the artist.", "minimum": 0 }, "tags": { "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "biography": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "born": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "bornIn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "died": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "genres": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] } } }, "app.rocksky.artist.defs__songViewBasic": { "type": "object", "properties": { "uri": { "type": "string", "description": "The URI of the song.", "x-lexicon-format": "at-uri" }, "title": { "type": "string", "description": "The title of the song." }, "playCount": { "type": "integer", "description": "The number of times the song has been played.", "minimum": 0 } } }, "app.rocksky.artist.defs__listenerViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the actor." }, "did": { "type": "string", "description": "The DID of the listener." }, "handle": { "type": "string", "description": "The handle of the listener." }, "displayName": { "type": "string", "description": "The display name of the listener." }, "avatar": { "type": "string", "description": "The URL of the listener's avatar image.", "format": "uri" }, "mostListenedSong": { "$ref": "#/components/schemas/app.rocksky.artist.defs__songViewBasic" }, "totalPlays": { "type": "integer", "description": "The total number of plays by the listener.", "minimum": 0 }, "rank": { "type": "integer", "description": "The rank of the listener among all listeners of the artist.", "minimum": 1 } } }, "app.rocksky.artist.defs__recentListenerView": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the listener." }, "did": { "type": "string", "description": "The DID of the listener." }, "handle": { "type": "string", "description": "The handle of the listener." }, "displayName": { "type": "string", "description": "The display name of the listener." }, "avatar": { "type": "string", "description": "The URL of the listener's avatar image.", "format": "uri" }, "timestamp": { "type": "string", "description": "The timestamp of the listener's most recent scrobble of this artist.", "format": "date-time" }, "scrobbleUri": { "type": "string", "description": "The URI of the listener's most recent scrobble of this artist.", "x-lexicon-format": "at-uri" } } }, "app.rocksky.charts.defs__chartsView": { "type": "object", "properties": { "scrobbles": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.charts.defs__scrobbleViewBasic" } } } }, "app.rocksky.charts.defs__scrobbleViewBasic": { "type": "object", "properties": { "date": { "type": "string", "description": "The date of the scrobble.", "format": "date-time" }, "count": { "type": "integer", "description": "The number of scrobbles on this date." } } }, "app.rocksky.charts.defs__decadeViewBasic": { "type": "object", "properties": { "decade": { "type": "integer", "description": "The first year of the decade, e.g. 1990." }, "scrobbles": { "type": "integer", "description": "The number of scrobbles of music released in this decade." }, "uniqueAlbums": { "type": "integer", "description": "The number of distinct albums scrobbled from this decade." } } }, "app.rocksky.charts.defs__scrobblerViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the actor." }, "did": { "type": "string", "description": "The DID of the actor." }, "handle": { "type": "string", "description": "The handle of the actor." }, "displayName": { "type": "string", "description": "The display name of the actor." }, "avatar": { "type": "string", "description": "The URL of the actor's avatar image.", "format": "uri" }, "scrobbles": { "type": "integer", "description": "The number of scrobbles in the requested window." }, "uniqueArtists": { "type": "integer", "description": "The number of distinct artists scrobbled in the window." }, "uniqueTracks": { "type": "integer", "description": "The number of distinct tracks scrobbled in the window." } } }, "app.rocksky.equalizer.defs__presetView": { "type": "object", "properties": { "uri": { "type": "string", "description": "AT URI of the preset record.", "x-lexicon-format": "at-uri" }, "rkey": { "type": "string", "description": "Record key: the preset name slugified (lower case, dashes, no spaces)." }, "name": { "type": "string", "description": "Display name of the preset." }, "precut": { "type": "integer", "description": "Pre-amplification cut in tenths of dB applied before EQ bands (e.g. -60 = -6.0 dB)", "minimum": -240, "maximum": 0 }, "bands": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__equalizerBand" }, "description": "Up to 10 EQ bands" }, "createdAt": { "type": "string", "description": "When this preset was first created.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "When this preset was last updated.", "format": "date-time" } }, "required": [ "uri", "rkey", "name", "bands", "createdAt" ] }, "app.rocksky.event.defs__eventView": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the event." }, "uri": { "type": "string", "description": "AT-URI of the community.lexicon.calendar.event record.", "x-lexicon-format": "at-uri" }, "cid": { "type": "string", "description": "CID of the calendar event record revision that was indexed.", "x-lexicon-format": "cid" }, "musicUri": { "type": "string", "description": "AT-URI of the app.rocksky.event.music record.", "x-lexicon-format": "at-uri" }, "musicCid": { "type": "string", "description": "CID of the music record revision that was indexed.", "x-lexicon-format": "cid" }, "name": { "type": "string", "description": "The name of the event." }, "description": { "type": "string", "description": "The description of the event." }, "kind": { "type": "string", "description": "What sort of music event this is (concert, festival...).", "x-lexicon-knownValues": [ "concert", "festival", "club-night", "dj-set", "livestream", "release-party", "listening-party" ] }, "genre": { "type": "string", "description": "The main genre of the event." }, "tags": { "type": "array", "items": { "type": "string" } }, "startsAt": { "type": "string", "description": "When the event starts.", "format": "date-time" }, "endsAt": { "type": "string", "description": "When the event ends.", "format": "date-time" }, "mode": { "type": "string", "description": "The attendance mode, as a community.lexicon.calendar.event#mode token.", "x-lexicon-knownValues": [ "community.lexicon.calendar.event#inperson", "community.lexicon.calendar.event#virtual", "community.lexicon.calendar.event#hybrid" ] }, "status": { "type": "string", "description": "The event status, as a community.lexicon.calendar.event#status token.", "x-lexicon-knownValues": [ "community.lexicon.calendar.event#planned", "community.lexicon.calendar.event#scheduled", "community.lexicon.calendar.event#rescheduled", "community.lexicon.calendar.event#cancelled", "community.lexicon.calendar.event#postponed" ] }, "imageUrl": { "type": "string", "description": "Poster or banner image of the event: the music record's imageUrl, or the calendar event's thumbnail media when the music record has none.", "format": "uri" }, "media": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.event.defs__mediaView" }, "description": "Images attached to the calendar event record (poster, header), as blobs in the publisher's repo." }, "ticketsUrl": { "type": "string", "description": "Where tickets can be bought.", "format": "uri" }, "locations": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.event.defs__locationView" }, "description": "Where the event takes place." }, "uris": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.event.defs__uriView" }, "description": "Links associated with the event." }, "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.event.defs__artistView" }, "description": "The lineup, in billing order." }, "externalIds": { "$ref": "#/components/schemas/app.rocksky.event.music__externalIds" }, "organizerDid": { "type": "string", "description": "The DID of the repo that published the event.", "x-lexicon-format": "did" }, "organizerHandle": { "type": "string", "description": "The handle of the publisher." }, "organizerName": { "type": "string", "description": "The display name of the publisher." }, "organizerAvatarUrl": { "type": "string", "description": "The avatar of the publisher.", "format": "uri" }, "rsvpCounts": { "$ref": "#/components/schemas/app.rocksky.event.defs__rsvpCounts" }, "viewerRsvp": { "type": "string", "description": "The authenticated viewer's RSVP, as a community.lexicon.calendar.rsvp status token. Absent when not authenticated or when the viewer has not responded.", "x-lexicon-knownValues": [ "community.lexicon.calendar.rsvp#going", "community.lexicon.calendar.rsvp#interested", "community.lexicon.calendar.rsvp#notgoing" ] }, "createdAt": { "type": "string", "description": "When the event record was created.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "When the event was last indexed.", "format": "date-time" } }, "required": [ "id", "uri", "musicUri", "name", "artists", "locations", "uris", "rsvpCounts", "organizerDid", "createdAt", "updatedAt" ], "description": "A music event: the calendar event merged with its app.rocksky.event.music annotation." }, "app.rocksky.event.defs__artistView": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the linked Rocksky artist." }, "uri": { "type": "string", "description": "AT-URI of the linked artist.", "x-lexicon-format": "at-uri" }, "sha256": { "type": "string", "description": "The SHA256 hash of the linked artist." }, "name": { "type": "string", "description": "The artist name as billed on the event." }, "picture": { "type": "string", "description": "The picture of the linked artist." }, "mbid": { "type": "string", "description": "MusicBrainz artist id." }, "role": { "type": "string", "description": "The artist's billing on this event.", "x-lexicon-knownValues": [ "headliner", "support", "opener", "dj", "special-guest", "performer" ] }, "stage": { "type": "string", "description": "The stage the artist plays on." }, "startsAt": { "type": "string", "description": "When this artist's set starts.", "format": "date-time" } }, "required": [ "name" ], "description": "An artist on an event lineup, linked to the Rocksky artist when one was resolved." }, "app.rocksky.event.defs__locationView": { "type": "object", "properties": { "type": { "type": "string", "x-lexicon-knownValues": [ "community.lexicon.location.address", "community.lexicon.location.geo", "community.lexicon.location.fsq", "community.lexicon.location.hthree", "community.lexicon.calendar.event#uri" ] }, "name": { "type": "string", "description": "The name of the location (venue name)." }, "country": { "type": "string", "description": "ISO 3166 country code." }, "postalCode": { "type": "string" }, "region": { "type": "string" }, "locality": { "type": "string", "description": "City or town." }, "street": { "type": "string" }, "latitude": { "type": "string" }, "longitude": { "type": "string" }, "altitude": { "type": "string" }, "fsqPlaceId": { "type": "string", "description": "Foursquare Open Source Places id." }, "h3": { "type": "string", "description": "H3 encoded location." }, "uri": { "type": "string", "description": "A URL standing in for the location (online events).", "format": "uri" } }, "required": [ "type" ], "description": "One entry of the calendar event's locations, flattened: `type` says which community.lexicon.location shape it came from, and only the fields of that shape are set." }, "app.rocksky.event.defs__mediaView": { "type": "object", "properties": { "role": { "type": "string", "description": "What the image is for.", "x-lexicon-knownValues": [ "thumbnail", "header" ] }, "url": { "type": "string", "description": "Where to load the image from.", "format": "uri" }, "cid": { "type": "string", "description": "CID of the blob in the publisher's repo.", "x-lexicon-format": "cid" }, "mimeType": { "type": "string" }, "size": { "type": "integer", "description": "Blob size in bytes.", "minimum": 0 }, "width": { "type": "integer", "minimum": 1 }, "height": { "type": "integer", "minimum": 1 }, "alt": { "type": "string" } }, "required": [ "role", "url", "cid", "mimeType" ], "description": "One entry of the calendar event's media array, with a URL the blob can be fetched from." }, "app.rocksky.event.defs__uriView": { "type": "object", "properties": { "uri": { "type": "string", "format": "uri" }, "name": { "type": "string", "description": "The display name of the URI." } }, "required": [ "uri" ] }, "app.rocksky.event.defs__rsvpCounts": { "type": "object", "properties": { "going": { "type": "integer", "minimum": 0 }, "interested": { "type": "integer", "minimum": 0 }, "notGoing": { "type": "integer", "minimum": 0 } }, "required": [ "going", "interested", "notGoing" ] }, "app.rocksky.event.defs__rsvpView": { "type": "object", "properties": { "uri": { "type": "string", "description": "AT-URI of the rsvp record.", "x-lexicon-format": "at-uri" }, "cid": { "type": "string", "x-lexicon-format": "cid" }, "status": { "type": "string", "x-lexicon-knownValues": [ "community.lexicon.calendar.rsvp#going", "community.lexicon.calendar.rsvp#interested", "community.lexicon.calendar.rsvp#notgoing" ] }, "did": { "type": "string", "x-lexicon-format": "did" }, "handle": { "type": "string" }, "displayName": { "type": "string" }, "avatar": { "type": "string", "format": "uri" }, "createdAt": { "type": "string", "format": "date-time" } }, "required": [ "uri", "status", "did", "handle", "displayName", "createdAt" ], "description": "A community.lexicon.calendar.rsvp on an event, with its author." }, "app.rocksky.event.music__externalIds": { "type": "object", "properties": { "ticketmaster": { "type": "string" }, "songkick": { "type": "string" }, "bandsintown": { "type": "string" }, "residentAdvisor": { "type": "string" }, "setlistfm": { "type": "string" }, "dice": { "type": "string" }, "eventbrite": { "type": "string" } }, "description": "Identifiers of the event on other services." }, "app.rocksky.feed.defs__searchResultsView": { "type": "object", "properties": { "hits": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.feed.defs__searchHit" } }, "processingTimeMs": { "type": "integer" }, "limit": { "type": "integer" }, "offset": { "type": "integer" }, "estimatedTotalHits": { "type": "integer" } } }, "app.rocksky.feed.defs__storyView": { "type": "object", "properties": { "album": { "type": "string" }, "albumArt": { "type": "string", "format": "uri" }, "albumArtist": { "type": "string" }, "albumUri": { "type": "string", "x-lexicon-format": "at-uri" }, "artist": { "type": "string" }, "artistUri": { "type": "string", "x-lexicon-format": "at-uri" }, "avatar": { "type": "string", "format": "uri" }, "createdAt": { "type": "string" }, "did": { "type": "string", "x-lexicon-format": "at-identifier" }, "handle": { "type": "string" }, "id": { "type": "string" }, "title": { "type": "string" }, "trackId": { "type": "string" }, "trackUri": { "type": "string", "x-lexicon-format": "at-uri" }, "uri": { "type": "string", "x-lexicon-format": "at-uri" }, "liked": { "type": "boolean" }, "likesCount": { "type": "integer" } } }, "app.rocksky.feed.defs__storiesView": { "type": "object", "properties": { "stories": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.feed.defs__storyView" } } } }, "app.rocksky.feed.defs__feedGeneratorsView": { "type": "object", "properties": { "feeds": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.feed.defs__feedGeneratorView" } } } }, "app.rocksky.feed.defs__feedGeneratorView": { "type": "object", "properties": { "id": { "type": "string" }, "name": { "type": "string" }, "description": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "uri": { "type": "string", "x-lexicon-format": "at-uri" }, "avatar": { "anyOf": [ { "type": "string", "format": "uri" }, { "type": "null" } ] }, "creator": { "$ref": "#/components/schemas/app.rocksky.actor.defs__profileViewBasic" }, "did": { "type": "string" } } }, "app.rocksky.feed.defs__feedItemView": { "type": "object", "properties": { "scrobble": { "$ref": "#/components/schemas/app.rocksky.scrobble.defs__scrobbleViewBasic" } } }, "app.rocksky.feed.defs__feedView": { "type": "object", "properties": { "feed": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.feed.defs__feedItemView" } }, "cursor": { "type": "string", "description": "The pagination cursor for the next set of results." }, "scrobbles": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.scrobble.defs__scrobbleViewBasic" }, "description": "Legacy empty-array error fallback; successful responses use feed." } } }, "app.rocksky.feed.defs__recommendationView": { "type": "object", "properties": { "title": { "type": "string" }, "artist": { "type": "string" }, "album": { "type": "string" }, "albumArt": { "type": "string", "format": "uri" }, "trackUri": { "type": "string", "x-lexicon-format": "at-uri" }, "artistUri": { "type": "string", "x-lexicon-format": "at-uri" }, "albumUri": { "type": "string", "x-lexicon-format": "at-uri" }, "genres": { "type": "array", "items": { "type": "string" } }, "source": { "type": "string", "description": "neighbour | social | serendipity" }, "likesCount": { "type": "integer" }, "recommendationScore": { "type": "number", "description": "Production recommendation scores can be fractional. Retained as an open extension because Lexicon integer cannot describe this wire value." } } }, "app.rocksky.feed.defs__recommendationsView": { "type": "object", "properties": { "recommendations": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.feed.defs__recommendationView" } }, "cursor": { "type": "string" } } }, "app.rocksky.feed.defs__recommendedArtistView": { "type": "object", "properties": { "id": { "type": "string" }, "uri": { "type": "string", "x-lexicon-format": "at-uri" }, "name": { "type": "string" }, "picture": { "type": "string", "format": "uri" }, "genres": { "type": "array", "items": { "type": "string" } }, "source": { "type": "string", "description": "neighbour | social | serendipity" }, "recommendationScore": { "type": "number", "description": "Production recommendation scores can be fractional. Retained as an open extension because Lexicon integer cannot describe this wire value." } } }, "app.rocksky.feed.defs__recommendedArtistsView": { "type": "object", "properties": { "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.feed.defs__recommendedArtistView" } }, "cursor": { "type": "string" } } }, "app.rocksky.feed.defs__recommendedAlbumView": { "type": "object", "properties": { "id": { "type": "string" }, "uri": { "type": "string", "x-lexicon-format": "at-uri" }, "title": { "type": "string" }, "artist": { "type": "string" }, "artistUri": { "type": "string", "x-lexicon-format": "at-uri" }, "year": { "type": "integer" }, "albumArt": { "type": "string", "format": "uri" }, "source": { "type": "string", "description": "known-artist | new-artist | serendipity" }, "recommendationScore": { "type": "number", "description": "Production recommendation scores can be fractional. Retained as an open extension because Lexicon integer cannot describe this wire value." } } }, "app.rocksky.feed.defs__recommendedAlbumsView": { "type": "object", "properties": { "albums": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.feed.defs__recommendedAlbumView" } }, "cursor": { "type": "string" } } }, "app.rocksky.feed.defs__searchFederation": { "type": "object", "properties": { "indexUid": { "type": "string" } } }, "app.rocksky.feed.defs__searchHit": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the song." }, "title": { "type": "string", "description": "The title of the song." }, "artist": { "type": "string", "description": "The artist of the song." }, "albumArtist": { "type": "string", "description": "The artist of the album the song belongs to." }, "albumArt": { "anyOf": [ { "type": "string", "description": "The URL of the album art image.", "format": "uri" }, { "type": "null" } ] }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the song.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "album": { "type": "string", "description": "The album of the song." }, "duration": { "type": "integer", "description": "The duration of the song in milliseconds." }, "trackNumber": { "anyOf": [ { "type": "integer", "description": "The track number of the song in the album." }, { "type": "null" } ] }, "discNumber": { "anyOf": [ { "type": "integer", "description": "The disc number of the song in the album." }, { "type": "null" } ] }, "playCount": { "type": "integer", "description": "The number of times the song has been played.", "minimum": 0 }, "likesCount": { "type": "integer", "description": "The number of users who have loved this song.", "minimum": 0 }, "liked": { "type": "boolean", "description": "Whether the authenticated user has loved this song. False when unauthenticated." }, "uniqueListeners": { "type": "integer", "description": "The number of unique listeners who have played the song.", "minimum": 0 }, "albumUri": { "anyOf": [ { "type": "string", "description": "The URI of the album the song belongs to.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "artistUri": { "anyOf": [ { "type": "string", "description": "The URI of the artist of the song.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the song." }, "mbid": { "type": "string", "description": "The MusicBrainz ID of the song." }, "isrc": { "anyOf": [ { "type": "string", "description": "The International Standard Recording Code (ISRC) of the song." }, { "type": "null" } ] }, "tags": { "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string", "description": "The timestamp when the song was created.", "format": "date-time" }, "updatedAt": { "type": "string" }, "mbId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lyrics": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composer": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "genre": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "copyrightMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "key": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "acoustidFingerprint": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "year": { "anyOf": [ { "type": "integer", "description": "The year the album was released." }, { "type": "null" } ] }, "releaseDate": { "anyOf": [ { "type": "string", "description": "The release date of the album." }, { "type": "null" } ] }, "discogsReleaseId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "name": { "type": "string", "description": "The name of the artist." }, "picture": { "anyOf": [ { "type": "string", "description": "The picture of the artist." }, { "type": "null" } ] }, "biography": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "born": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "bornIn": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "died": { "anyOf": [ { "type": "string", "format": "date-time" }, { "type": "null" } ] }, "genres": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "curatorDid": { "type": "string", "description": "The DID of the curator of the playlist.", "x-lexicon-format": "at-identifier" }, "curatorHandle": { "type": "string", "description": "The handle of the curator of the playlist.", "x-lexicon-format": "at-identifier" }, "curatorName": { "type": "string", "description": "The name of the curator of the playlist." }, "curatorAvatarUrl": { "type": "string", "description": "The URL of the avatar image of the curator.", "format": "uri" }, "description": { "type": "string", "description": "A description of the playlist." }, "coverImageUrl": { "anyOf": [ { "type": "string", "description": "The URL of the cover image for the playlist.", "format": "uri" }, { "type": "null" } ] }, "trackCount": { "type": "integer", "description": "The number of tracks in the playlist.", "minimum": 0 }, "trackArts": { "type": "array", "items": { "type": "string", "format": "uri" }, "description": "Album-art URLs of up to four of the playlist's tracks, for rendering a cover mosaic when the playlist has no picture of its own." }, "curatorDId": { "type": "string" }, "did": { "type": "string", "description": "The DID of the actor." }, "handle": { "type": "string", "description": "The handle of the actor." }, "displayName": { "anyOf": [ { "type": "string", "description": "The display name of the actor." }, { "type": "null" } ] }, "avatar": { "anyOf": [ { "type": "string", "description": "The URL of the actor's avatar image.", "format": "uri" }, { "type": "null" } ] }, "_federation": { "$ref": "#/components/schemas/app.rocksky.feed.defs__searchFederation" }, "bpm": { "type": [ "number", "null" ], "description": "Production returns a nullable floating-point number. Lexicon has no float primitive; retained as an open extension without changing response data." } } }, "app.rocksky.mirror.defs__mirrorSourceView": { "type": "object", "properties": { "provider": { "type": "string", "description": "One of: lastfm, listenbrainz, tealfm" }, "enabled": { "type": "boolean", "description": "Whether scrobbles from this source are being mirrored into Rocksky." }, "pushEnabled": { "type": "boolean", "description": "Whether Rocksky scrobbles are mirrored out to this source. Enabled unless the user turned it off. teal.fm only." }, "externalUsername": { "type": "string", "description": "Username on the external service (Last.fm / ListenBrainz). Null for Teal.fm." }, "hasCredentials": { "type": "boolean", "description": "True when an API key is stored. Last.fm/ListenBrainz only; always false for Teal.fm." }, "lastPolledAt": { "type": "string", "description": "The last time the mirror process successfully polled this source.", "format": "date-time" }, "lastScrobbleSeenAt": { "type": "string", "description": "Watermark — scrobbles from the external service older than this are skipped.", "format": "date-time" } }, "required": [ "provider", "enabled", "hasCredentials" ] }, "app.rocksky.notification.defs__notificationActor": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the actor." }, "did": { "type": "string", "description": "The decentralized identifier of the actor.", "x-lexicon-format": "did" }, "handle": { "type": "string", "description": "The handle of the actor.", "x-lexicon-format": "at-identifier" }, "displayName": { "type": "string", "description": "The display name of the actor." }, "avatar": { "type": "string", "description": "The URL of the actor's avatar image.", "format": "uri" } }, "description": "The user who triggered a notification." }, "app.rocksky.notification.defs__notificationView": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the notification." }, "type": { "type": "string", "description": "The notification type: like_scrobble, follow, comment_scrobble, comment_profile, reply, or react_comment.", "x-lexicon-knownValues": [ "like_scrobble", "follow", "comment_scrobble", "comment_profile", "reply", "react_comment" ] }, "read": { "type": "boolean", "description": "Whether the notification has been viewed." }, "createdAt": { "type": "string", "description": "When the notification was created.", "format": "date-time" }, "subjectUri": { "type": "string", "description": "The at-uri of the subject the notification relates to." }, "shoutId": { "type": "string", "description": "The id of the related shout, if any." }, "shoutContent": { "type": "string", "description": "The content of the related shout, if any." }, "actor": { "$ref": "#/components/schemas/app.rocksky.notification.defs__notificationActor" }, "subject": { "$ref": "#/components/schemas/app.rocksky.notification.defs__subjectView" } }, "required": [ "id", "type", "read", "createdAt" ] }, "app.rocksky.notification.defs__subjectView": { "type": "object", "properties": { "uri": { "type": "string", "description": "The at-uri of the subject." }, "title": { "type": "string", "description": "The title of the track or album." }, "artist": { "type": "string", "description": "The artist of the track or album." }, "albumArt": { "type": "string", "description": "The album art image URL.", "format": "uri" } }, "required": [ "uri" ], "description": "The song, album, or scrobble a notification relates to, for rich display." }, "app.rocksky.player.defs__currentlyPlayingViewDetailed": { "type": "object", "properties": { "title": { "type": "string", "description": "The title of the currently playing track" }, "device": {}, "shuffle_state": { "type": "boolean" }, "repeat_state": { "type": "string" }, "timestamp": { "type": "integer" }, "context": {}, "progress_ms": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "item": {}, "currently_playing_type": { "type": "string" }, "actions": {}, "is_playing": { "type": "boolean" }, "uri": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "albumUri": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "artistUri": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "liked": { "type": "boolean" } } }, "app.rocksky.player.defs__playbackQueueViewDetailed": { "type": "object", "properties": { "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" } } } }, "app.rocksky.playlist.defs__playlistViewDetailed": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the playlist." }, "title": { "type": "string", "description": "The title of the playlist." }, "uri": { "type": "string", "description": "The URI of the playlist.", "x-lexicon-format": "at-uri" }, "curatorDid": { "type": "string", "description": "The DID of the curator of the playlist.", "x-lexicon-format": "at-identifier" }, "curatorHandle": { "type": "string", "description": "The handle of the curator of the playlist.", "x-lexicon-format": "at-identifier" }, "curatorName": { "type": "string", "description": "The name of the curator of the playlist." }, "curatorAvatarUrl": { "type": "string", "description": "The URL of the avatar image of the curator.", "format": "uri" }, "description": { "type": "string", "description": "A description of the playlist." }, "coverImageUrl": { "anyOf": [ { "type": "string", "description": "The URL of the cover image for the playlist.", "format": "uri" }, { "type": "null" } ] }, "createdAt": { "type": "string", "description": "The date and time when the playlist was created.", "format": "date-time" }, "tracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songViewBasic" }, "description": "A list of tracks in the playlist." }, "curatorDId": { "type": "string" }, "updatedAt": { "type": "string" }, "trackCount": { "type": "integer" } }, "description": "Detailed view of a playlist, including its tracks and metadata" }, "app.rocksky.playlist.defs__playlistViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the playlist." }, "title": { "type": "string", "description": "The title of the playlist." }, "uri": { "type": "string", "description": "The URI of the playlist.", "x-lexicon-format": "at-uri" }, "curatorDid": { "type": "string", "description": "The DID of the curator of the playlist.", "x-lexicon-format": "at-identifier" }, "curatorHandle": { "type": "string", "description": "The handle of the curator of the playlist.", "x-lexicon-format": "at-identifier" }, "curatorName": { "type": "string", "description": "The name of the curator of the playlist." }, "curatorAvatarUrl": { "type": "string", "description": "The URL of the avatar image of the curator.", "format": "uri" }, "description": { "type": "string", "description": "A description of the playlist." }, "coverImageUrl": { "anyOf": [ { "type": "string", "description": "The URL of the cover image for the playlist.", "format": "uri" }, { "type": "null" } ] }, "createdAt": { "type": "string", "description": "The date and time when the playlist was created.", "format": "date-time" }, "trackCount": { "type": "integer", "description": "The number of tracks in the playlist.", "minimum": 0 }, "trackArts": { "type": "array", "items": { "type": "string", "format": "uri" }, "description": "Album-art URLs of up to four of the playlist's tracks, for rendering a cover mosaic when the playlist has no picture of its own." }, "updatedAt": { "type": "string" }, "curatorDId": { "type": "string" } }, "description": "Basic view of a playlist, including its metadata" }, "app.rocksky.rockbox.defs__crossfadeSettings": { "type": "object", "properties": { "mode": { "type": "string", "description": "Crossfade mode: disabled | enabled | shuffle | albumChange | trackChange" }, "fadeInDelay": { "type": "integer", "description": "Fade-in delay in ms", "minimum": 0, "maximum": 7000 }, "fadeInDuration": { "type": "integer", "description": "Fade-in duration in ms", "minimum": 0, "maximum": 15000 }, "fadeOutDelay": { "type": "integer", "description": "Fade-out delay in ms", "minimum": 0, "maximum": 7000 }, "fadeOutDuration": { "type": "integer", "description": "Fade-out duration in ms", "minimum": 0, "maximum": 15000 }, "fadeOutMixMode": { "type": "string", "description": "Fade-out mix mode: crossfade | mix" } } }, "app.rocksky.rockbox.defs__equalizerBand": { "type": "object", "properties": { "frequency": { "type": "integer", "description": "Center frequency in Hz", "minimum": 20, "maximum": 22000 }, "gain": { "type": "integer", "description": "Band gain in tenths of dB (e.g. 30 = +3.0 dB)", "minimum": -240, "maximum": 240 }, "q": { "type": "integer", "description": "Q factor × 10 (e.g. 7 = Q 0.7)", "minimum": 5, "maximum": 640 } }, "required": [ "frequency", "gain", "q" ] }, "app.rocksky.rockbox.defs__equalizerSettings": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether the equalizer is enabled" }, "precut": { "type": "integer", "description": "Pre-amplification cut in tenths of dB applied before EQ bands (e.g. -60 = -6.0 dB)", "minimum": -240, "maximum": 0 }, "bands": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__equalizerBand" }, "description": "Up to 10 EQ bands" } } }, "app.rocksky.rockbox.defs__replayGainSettings": { "type": "object", "properties": { "mode": { "type": "string", "description": "Replay gain mode: disabled | track | album | trackIfShuffling" }, "preamp": { "type": "integer", "description": "Pre-amplification in tenths of dB (e.g. 15 = +1.5 dB)", "minimum": -120, "maximum": 120 }, "preventClipping": { "type": "boolean", "description": "Whether to prevent clipping by reducing volume" } } }, "app.rocksky.rockbox.defs__toneSettings": { "type": "object", "properties": { "bass": { "type": "integer", "description": "Bass level in dB", "minimum": -24, "maximum": 24 }, "treble": { "type": "integer", "description": "Treble level in dB", "minimum": -24, "maximum": 24 }, "balance": { "type": "integer", "description": "Left/right balance. Negative = left, positive = right", "minimum": -100, "maximum": 100 }, "channels": { "type": "string", "description": "Channel configuration: stereo | mono | monoLeft | monoRight | karaoke | wide" } } }, "app.rocksky.rockbox.defs__settingsView": { "type": "object", "properties": { "crossfade": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__crossfadeSettings", "description": "Crossfade settings" }, "equalizer": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__equalizerSettings", "description": "Equalizer settings" }, "replayGain": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__replayGainSettings", "description": "Replay gain settings" }, "tone": { "$ref": "#/components/schemas/app.rocksky.rockbox.defs__toneSettings", "description": "Tone control settings (bass, treble, balance, channels)" }, "createdAt": { "type": "string", "description": "When this settings record was first created.", "format": "date-time" }, "updatedAt": { "type": "string", "description": "When this settings record was last updated.", "format": "date-time" } }, "required": [ "createdAt" ] }, "app.rocksky.scrobble.defs__scrobbleViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the scrobble." }, "trackId": { "anyOf": [ { "type": "string", "description": "The unique identifier of the track this scrobble is of." }, { "type": "null" } ] }, "title": { "type": "string", "description": "The title of the scrobble." }, "artist": { "type": "string", "description": "The artist of the song." }, "artistUri": { "anyOf": [ { "type": "string", "description": "The URI of the artist.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "albumArtist": { "anyOf": [ { "type": "string", "description": "The album artist of the song." }, { "type": "null" } ] }, "album": { "type": "string", "description": "The album of the song." }, "albumUri": { "anyOf": [ { "type": "string", "description": "The URI of the album.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "albumArt": { "anyOf": [ { "type": "string", "description": "The album art URL of the song.", "format": "uri" }, { "type": "null" } ] }, "trackUri": { "anyOf": [ { "type": "string", "description": "The URI of the track (song) this scrobble is of.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "handle": { "type": "string", "description": "The handle of the user who created the scrobble." }, "did": { "type": "string", "description": "The DID of the user who created the scrobble.", "x-lexicon-format": "at-identifier" }, "avatar": { "type": "string", "description": "The avatar URL of the user who created the scrobble.", "format": "uri" }, "createdAt": { "type": "string", "description": "The timestamp when the scrobble was created.", "format": "date-time" }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the scrobble.", "format": "uri" }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the scrobble data." }, "liked": { "type": "boolean" }, "likesCount": { "type": "integer" }, "cover": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "date": { "type": "string" }, "user": { "type": "string" }, "userDisplayName": { "type": "string" }, "userAvatar": { "type": "string" }, "tags": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "mbId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "mbid": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "isrc": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composer": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "trackNumber": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "duration": { "type": "integer" }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "discNumber": { "type": "integer" }, "genre": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "copyrightMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "key": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "xataVersion": { "type": "integer" }, "bpm": { "type": [ "number", "null" ], "description": "Production returns a nullable floating-point number. Lexicon has no float primitive; retained as an open extension without changing response data." }, "updatedAt": { "anyOf": [ { "type": "string" }, { "type": "object" } ], "description": "Existing response fixtures contain an empty object while other presentations use a timestamp string. Lexicon cannot express an untagged object/string union; preserve the existing open extension." } } }, "app.rocksky.scrobble.defs__scrobbleViewDetailed": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the scrobble." }, "user": { "type": "string", "description": "The handle of the user who created the scrobble." }, "title": { "type": "string", "description": "The title of the scrobble." }, "artist": { "type": "string", "description": "The artist of the song." }, "artistUri": { "anyOf": [ { "type": "string", "description": "The URI of the artist.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "album": { "type": "string", "description": "The album of the song." }, "albumUri": { "type": "string", "description": "The URI of the album.", "x-lexicon-format": "at-uri" }, "cover": { "type": "string", "description": "The album art URL of the song.", "format": "uri" }, "date": { "type": "string", "description": "The timestamp when the scrobble was created.", "format": "date-time" }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the scrobble.", "format": "uri" }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the scrobble data." }, "liked": { "type": "boolean" }, "trackUri": { "type": "string", "description": "The URI of the track (song) this scrobble is of." }, "likesCount": { "type": "integer" }, "listeners": { "type": "integer", "description": "The number of listeners" }, "scrobbles": { "type": "integer", "description": "The number of scrobbles for this song" }, "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__artistViewBasic" } }, "firstScrobble": { "$ref": "#/components/schemas/app.rocksky.scrobble.defs__firstScrobbleView", "description": "The first scrobble of this song on Rocksky." }, "mbId": { "anyOf": [ { "type": "string", "description": "The MusicBrainz recording ID of the track, when available." }, { "type": "null" } ] }, "isrc": { "anyOf": [ { "type": "string", "description": "The International Standard Recording Code (ISRC) of the track, when available." }, { "type": "null" } ] }, "tags": { "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string" }, "updatedAt": { "type": "string" }, "albumArtist": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "trackNumber": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "duration": { "type": "integer" }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "discNumber": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "lyrics": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composer": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "genre": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "copyrightMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "key": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "acoustidFingerprint": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "mbid": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "bpm": { "type": [ "number", "null" ], "description": "Production returns a nullable floating-point number. Lexicon has no float primitive; retained as an open extension without changing response data." } } }, "app.rocksky.scrobble.defs__firstScrobbleView": { "type": "object", "properties": { "handle": { "type": "string", "description": "The handle of the user who first scrobbled this song." }, "avatar": { "type": "string", "description": "The avatar URL of the user who first scrobbled this song.", "format": "uri" }, "timestamp": { "type": "string", "description": "The timestamp of the first scrobble.", "format": "date-time" } } }, "app.rocksky.shout.defs__author": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the author." }, "did": { "type": "string", "description": "The decentralized identifier (DID) of the author.", "x-lexicon-format": "at-identifier" }, "handle": { "type": "string", "description": "The handle of the author.", "x-lexicon-format": "at-identifier" }, "displayName": { "anyOf": [ { "type": "string", "description": "The display name of the author." }, { "type": "null" } ] }, "avatar": { "anyOf": [ { "type": "string", "description": "The URL of the author's avatar image.", "format": "uri" }, { "type": "null" } ] } } }, "app.rocksky.shout.defs__shoutView": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the shout." }, "message": { "type": "string", "description": "The content of the shout." }, "parent": { "anyOf": [ { "type": "string", "description": "The ID of the parent shout if this is a reply, otherwise null." }, { "type": "null" } ] }, "createdAt": { "type": "string", "description": "The date and time when the shout was created.", "format": "date-time" }, "author": { "$ref": "#/components/schemas/app.rocksky.shout.defs__author", "description": "The author of the shout." }, "gif": { "$ref": "#/components/schemas/app.rocksky.shout.defs__gif", "description": "An attached GIF, sticker, or clip." }, "facets": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.shout.defs__mention" }, "description": "Mentions of other actors within the message, anchored to UTF-8 byte ranges." }, "content": { "type": "string" }, "uri": { "type": "string" }, "likes": { "type": "integer" }, "liked": { "type": "boolean" } } }, "app.rocksky.shout.defs__mention": { "type": "object", "properties": { "did": { "type": "string", "description": "The DID of the mentioned actor.", "x-lexicon-format": "did" }, "byteStart": { "type": "integer", "description": "Inclusive UTF-8 byte offset of the mention start.", "minimum": 0 }, "byteEnd": { "type": "integer", "description": "Exclusive UTF-8 byte offset of the mention end.", "minimum": 0 } }, "required": [ "did", "byteStart", "byteEnd" ], "description": "A mention of another actor within the shout message, anchored to a UTF-8 byte range in the message." }, "app.rocksky.shout.defs__gif": { "type": "object", "properties": { "url": { "type": "string", "description": "Direct URL of the animated GIF/MP4.", "format": "uri" }, "previewUrl": { "type": "string", "description": "Smaller still/preview image URL.", "format": "uri" }, "alt": { "type": "string", "description": "Alternative text describing the media.", "maxLength": 512 }, "width": { "type": "integer", "description": "The intrinsic width of the media in pixels.", "minimum": 0 }, "height": { "type": "integer", "description": "The intrinsic height of the media in pixels.", "minimum": 0 } }, "required": [ "url" ], "description": "A GIF, sticker, or clip embedded in a shout. `url` may point at an image (GIF/WebP) or a video (MP4); the client decides how to render it from the file extension." }, "app.rocksky.song.defs__songViewBasic": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the song." }, "title": { "type": "string", "description": "The title of the song." }, "artist": { "type": "string", "description": "The artist of the song." }, "albumArtist": { "type": "string", "description": "The artist of the album the song belongs to." }, "albumArt": { "anyOf": [ { "type": "string", "description": "The URL of the album art image.", "format": "uri" }, { "type": "null" } ] }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the song.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "album": { "type": "string", "description": "The album of the song." }, "duration": { "type": "integer", "description": "The duration of the song in milliseconds." }, "trackNumber": { "anyOf": [ { "type": "integer", "description": "The track number of the song in the album." }, { "type": "null" } ] }, "discNumber": { "anyOf": [ { "type": "integer", "description": "The disc number of the song in the album." }, { "type": "null" } ] }, "playCount": { "type": "integer", "description": "The number of times the song has been played.", "minimum": 0 }, "likesCount": { "type": "integer", "description": "The number of users who have loved this song.", "minimum": 0 }, "liked": { "type": "boolean", "description": "Whether the authenticated user has loved this song. False when unauthenticated." }, "uniqueListeners": { "type": "integer", "description": "The number of unique listeners who have played the song.", "minimum": 0 }, "albumUri": { "anyOf": [ { "type": "string", "description": "The URI of the album the song belongs to.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "artistUri": { "anyOf": [ { "type": "string", "description": "The URI of the artist of the song.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the song." }, "mbid": { "type": "string", "description": "The MusicBrainz ID of the song." }, "isrc": { "anyOf": [ { "type": "string", "description": "The International Standard Recording Code (ISRC) of the song." }, { "type": "null" } ] }, "tags": { "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string", "description": "The timestamp when the song was created.", "format": "date-time" }, "updatedAt": { "type": "string" }, "mbId": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lyrics": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composer": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "genre": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "copyrightMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "key": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "acoustidFingerprint": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "bpm": { "type": [ "number", "null" ], "description": "Production returns a nullable floating-point number. Lexicon has no float primitive; retained as an open extension without changing response data." } } }, "app.rocksky.song.defs__songViewDetailed": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the song." }, "title": { "type": "string", "description": "The title of the song." }, "artist": { "type": "string", "description": "The artist of the song." }, "albumArtist": { "type": "string", "description": "The artist of the album the song belongs to." }, "albumArt": { "anyOf": [ { "type": "string", "description": "The URL of the album art image.", "format": "uri" }, { "type": "null" } ] }, "uri": { "anyOf": [ { "type": "string", "description": "The URI of the song.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "album": { "type": "string", "description": "The album of the song." }, "duration": { "type": "integer", "description": "The duration of the song in milliseconds." }, "trackNumber": { "anyOf": [ { "type": "integer", "description": "The track number of the song in the album." }, { "type": "null" } ] }, "discNumber": { "anyOf": [ { "type": "integer", "description": "The disc number of the song in the album." }, { "type": "null" } ] }, "playCount": { "type": "integer", "description": "The number of times the song has been played.", "minimum": 0 }, "likesCount": { "type": "integer", "description": "The number of users who have loved this song.", "minimum": 0 }, "liked": { "type": "boolean", "description": "Whether the authenticated user has loved this song. False when unauthenticated." }, "uniqueListeners": { "type": "integer", "description": "The number of unique listeners who have played the song.", "minimum": 0 }, "albumUri": { "anyOf": [ { "type": "string", "description": "The URI of the album the song belongs to.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "artistUri": { "anyOf": [ { "type": "string", "description": "The URI of the artist of the song.", "x-lexicon-format": "at-uri" }, { "type": "null" } ] }, "sha256": { "type": "string", "description": "The SHA256 hash of the song." }, "mbid": { "type": "string", "description": "The MusicBrainz ID of the song." }, "isrc": { "anyOf": [ { "type": "string", "description": "The International Standard Recording Code (ISRC) of the song." }, { "type": "null" } ] }, "tags": { "type": "array", "items": { "type": "string" } }, "createdAt": { "type": "string", "description": "The timestamp when the song was created.", "format": "date-time" }, "artists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.artist.defs__artistViewBasic" } }, "firstScrobble": { "$ref": "#/components/schemas/app.rocksky.song.defs__firstScrobbleView", "description": "The first scrobble of this song on Rocksky." }, "matches": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__songMatchView" }, "description": "Ranked list of candidate matches from external metadata providers (e.g. Deezer). Additive field returned by matchSong; may be empty." }, "mbId": { "anyOf": [ { "type": "string", "description": "The MusicBrainz recording ID of the track, when available." }, { "type": "null" } ] }, "updatedAt": { "type": "string" }, "releaseDate": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "year": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "artistPicture": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "genres": { "anyOf": [ { "type": "array", "items": { "type": "string" } }, { "type": "null" } ] }, "mbArtists": { "anyOf": [ { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__responseMbArtistsItemView" } }, { "type": "null" } ] }, "youtubeLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "spotifyLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "appleMusicLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "tidalLink": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "lyrics": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "composer": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "genre": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "label": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "copyrightMessage": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "key": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "acoustidFingerprint": { "anyOf": [ { "type": "string" }, { "type": "null" } ] }, "xataVersion": { "anyOf": [ { "type": "integer" }, { "type": "null" } ] }, "bpm": { "type": [ "number", "null" ], "description": "Production returns a nullable floating-point number. Lexicon has no float primitive; retained as an open extension without changing response data." } } }, "app.rocksky.song.defs__songMatchView": { "type": "object", "properties": { "id": { "type": "integer", "description": "The provider's numeric identifier for the matched track." }, "title": { "type": "string", "description": "The title of the matched track." }, "artist": { "type": "string", "description": "The artist of the matched track." }, "album": { "type": "string", "description": "The album of the matched track." }, "albumArt": { "type": "string", "description": "The URL of the matched track's album art image.", "format": "uri" }, "isrc": { "type": "string", "description": "The International Standard Recording Code (ISRC) of the matched track." }, "durationMs": { "type": "integer", "description": "The duration of the matched track in milliseconds.", "minimum": 0 }, "trackNumber": { "type": "integer", "description": "The track number of the matched track in its album." }, "discNumber": { "type": "integer", "description": "The disc number of the matched track in its album." }, "link": { "type": "string", "description": "A URL to the matched track on the provider.", "format": "uri" }, "preview": { "type": "string", "description": "A URL to a short audio preview of the matched track.", "format": "uri" }, "rank": { "type": "integer", "description": "The provider's popularity rank for the matched track." }, "explicit": { "type": "boolean", "description": "Whether the matched track has explicit lyrics." }, "score": { "type": "integer", "description": "Match confidence score in the range 0-100 (higher is better).", "minimum": 0, "maximum": 100 }, "source": { "type": "string", "description": "The metadata provider for this candidate." }, "providerId": { "type": "string", "description": "The provider identifier, including non-numeric identifiers." }, "mbId": { "type": "string", "description": "The MusicBrainz recording identifier of this candidate." }, "mbReleaseId": { "type": "string", "description": "The MusicBrainz release identifier of this candidate." }, "mbArtists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.song.defs__responseMbArtistsItemView" } } }, "description": "A ranked candidate match for a song from an external metadata provider." }, "app.rocksky.song.defs__recentListenerView": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the listener." }, "did": { "type": "string", "description": "The DID of the listener." }, "handle": { "type": "string", "description": "The handle of the listener." }, "displayName": { "type": "string", "description": "The display name of the listener." }, "avatar": { "type": "string", "description": "The URL of the listener's avatar image.", "format": "uri" }, "timestamp": { "type": "string", "description": "The timestamp of the listener's most recent scrobble of this song.", "format": "date-time" }, "scrobbleUri": { "type": "string", "description": "The URI of the listener's most recent scrobble of this song.", "x-lexicon-format": "at-uri" } } }, "app.rocksky.song.defs__firstScrobbleView": { "type": "object", "properties": { "handle": { "type": "string", "description": "The handle of the user who first scrobbled this song." }, "avatar": { "type": "string", "description": "The avatar URL of the user who first scrobbled this song.", "format": "uri" }, "timestamp": { "type": "string", "description": "The timestamp of the first scrobble.", "format": "date-time" } } }, "app.rocksky.song.defs__responseMbArtistsItemView": { "type": "object", "properties": { "mbid": { "type": "string" }, "name": { "type": "string" } } }, "app.rocksky.stats.defs__statsView": { "type": "object", "properties": { "scrobbles": { "type": "integer", "description": "The total number of scrobbles." }, "artists": { "type": "integer", "description": "The total number of unique artists scrobbled." }, "lovedTracks": { "type": "integer", "description": "The total number of tracks marked as loved." }, "albums": { "type": "integer", "description": "The total number of unique albums scrobbled." }, "tracks": { "type": "integer", "description": "The total number of unique tracks scrobbled." } } }, "app.rocksky.stats.defs__globalStatsView": { "type": "object", "properties": { "scrobbles": { "type": "integer", "description": "Total scrobbles across all users on Rocksky." }, "users": { "type": "integer", "description": "Total number of users on Rocksky." }, "artists": { "type": "integer", "description": "Total number of artists known to Rocksky." }, "albums": { "type": "integer", "description": "Total number of albums known to Rocksky." }, "tracks": { "type": "integer", "description": "Total number of tracks known to Rocksky." } } }, "app.rocksky.stats.defs__wrappedArtist": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the artist." }, "name": { "type": "string", "description": "The name of the artist." }, "picture": { "type": "string", "description": "The picture URL of the artist." }, "uri": { "type": "string", "description": "The AT-URI of the artist.", "x-lexicon-format": "at-uri" }, "playCount": { "type": "integer", "description": "Number of plays in the wrapped period.", "minimum": 0 } } }, "app.rocksky.stats.defs__wrappedTrack": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the track." }, "title": { "type": "string", "description": "The title of the track." }, "artist": { "type": "string", "description": "The artist of the track." }, "albumArt": { "type": "string", "description": "The album art URL." }, "uri": { "type": "string", "description": "The AT-URI of the track.", "x-lexicon-format": "at-uri" }, "artistUri": { "type": "string", "description": "The AT-URI of the artist.", "x-lexicon-format": "at-uri" }, "albumUri": { "type": "string", "description": "The AT-URI of the album.", "x-lexicon-format": "at-uri" }, "playCount": { "type": "integer", "description": "Number of plays in the wrapped period.", "minimum": 0 } } }, "app.rocksky.stats.defs__wrappedAlbum": { "type": "object", "properties": { "id": { "type": "string", "description": "The unique identifier of the album." }, "title": { "type": "string", "description": "The title of the album." }, "artist": { "type": "string", "description": "The artist of the album." }, "albumArt": { "type": "string", "description": "The album art URL." }, "uri": { "type": "string", "description": "The AT-URI of the album.", "x-lexicon-format": "at-uri" }, "playCount": { "type": "integer", "description": "Number of plays in the wrapped period.", "minimum": 0 } } }, "app.rocksky.stats.defs__wrappedGenreCount": { "type": "object", "properties": { "genre": { "type": "string", "description": "The genre name." }, "count": { "type": "integer", "description": "Number of scrobbles for this genre.", "minimum": 0 } } }, "app.rocksky.stats.defs__wrappedMonthCount": { "type": "object", "properties": { "month": { "type": "integer", "description": "Month number (1-12).", "minimum": 1, "maximum": 12 }, "count": { "type": "integer", "description": "Number of scrobbles in this month.", "minimum": 0 } } }, "app.rocksky.stats.defs__wrappedDayCount": { "type": "object", "properties": { "date": { "type": "string", "description": "The date (YYYY-MM-DD)." }, "count": { "type": "integer", "description": "Number of scrobbles on this day.", "minimum": 0 } } }, "app.rocksky.stats.defs__wrappedMilestone": { "type": "object", "properties": { "trackTitle": { "type": "string", "description": "The title of the track." }, "artistName": { "type": "string", "description": "The name of the artist." }, "timestamp": { "type": "string", "description": "The timestamp of the scrobble.", "format": "date-time" }, "trackUri": { "type": "string", "description": "AT-URI of the track record, used to build a clickable link to the song page.", "x-lexicon-format": "at-uri" } } }, "app.rocksky.stats.defs__wrappedView": { "type": "object", "properties": { "year": { "type": "integer", "description": "The year of the wrapped stats." }, "period": { "type": "string", "description": "The window the stats cover.", "x-lexicon-knownValues": [ "year", "3months", "month", "2weeks", "week" ] }, "startDate": { "type": "string", "description": "Inclusive start of the window.", "format": "date-time" }, "endDate": { "type": "string", "description": "Exclusive end of the window.", "format": "date-time" }, "totalScrobbles": { "type": "integer", "description": "Total scrobbles in the year.", "minimum": 0 }, "totalListeningTimeMinutes": { "type": "integer", "description": "Total listening time in minutes.", "minimum": 0 }, "topArtists": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedArtist" }, "description": "Top 5 artists by play count." }, "topTracks": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedTrack" }, "description": "Top 5 tracks by play count." }, "topAlbums": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedAlbum" }, "description": "Top 6 albums by play count." }, "topGenres": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedGenreCount" }, "description": "Top genres by play count." }, "scrobblesPerMonth": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedMonthCount" }, "description": "Scrobble counts per month." }, "scrobblesPerDay": { "type": "array", "items": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedDayCount" }, "description": "Scrobble counts per day (UTC), only days with plays." }, "mostActiveDay": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedDayCount", "description": "The most active day of the year." }, "mostActiveHour": { "type": "integer", "description": "The most active hour of the day (0-23).", "minimum": 0, "maximum": 23 }, "newArtistsCount": { "type": "integer", "description": "Number of artists heard for the first time this year.", "minimum": 0 }, "longestStreak": { "type": "integer", "description": "Longest consecutive days streak.", "minimum": 0 }, "firstScrobble": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedMilestone", "description": "The first scrobble of the year." }, "lastScrobble": { "$ref": "#/components/schemas/app.rocksky.stats.defs__wrappedMilestone", "description": "The last scrobble of the year." } } } } }}