Skip to content

Contratti API

TuneCamp espone un'API RESTful per la comunicazione tra la webapp e il backend, oltre a endpoint dedicati per ActivityPub e per il protocollo Subsonic. La specifica OpenAPI completa è contenuta in openapi.yml.

Autenticazione

La maggior parte degli endpoint richiede un JWT (JSON Web Token) nell'intestazione Authorization:

Authorization: Bearer <token>

È possibile ottenere un token inviando le proprie credenziali tramite una richiesta POST a /api/auth/login.


Endpoint Principali

Autenticazione (/api/auth)

MetodoPercorsoDescrizione
POST/api/users/registerRegistra un nuovo utente
POST/api/auth/loginAutentica l'utente e restituisce un JWT
GET/api/auth/statusRestituisce la sessione corrente e il profilo utente

Catalogo Musicale (/api/catalog, /api/tracks, /api/albums)

MetodoPercorsoDescrizione
GET/api/albumsElenca tutti gli album locali. Restituisce status (draft | published) e is_release (booleano) per distinguere i contenuti della libreria dalle release ufficiali
GET/api/albums/:idDettagli dell'album, inclusa la lista delle tracce
GET/api/artistsElenca tutti gli artisti
GET/api/tracks/:idMetadati della traccia
GET/api/tracks/:id/streamStream audio binario (supporta l'intestazione Range per le tracce cloud)
GET/api/waveform/:idDati della forma d'onda per la visualizzazione grafica
GET/api/releases/:id/artwork/:filenameServe in modo sicuro gli artwork aggiuntivi delle release

Pagamenti e Monetizzazione (/api/payments)

MetodoPercorsoDescrizione
POST/api/payments/stripe/create-sessionCrea una sessione di Stripe Checkout per acquisti in valuta fiat
GET/api/payments/onramp-configConfigurazione di Stripe Crypto Onramp
POST/api/payments/verifyVerifica una transazione on-chain (ETH/USDC) su Base
GET/api/payments/download/:trackId?code=...Scarica una traccia acquistata tramite codice di sblocco
GET/api/payments/rate/USDTasso di cambio corrente ETH/USD

Archiviazione e Cloud (/api/storage)

MetodoPercorsoDescrizione
GET/api/storage/gdrive/authAvvia il flusso OAuth2 di Google Drive
GET/api/storage/gdrive/filesElenca file e cartelle su Google Drive
POST/api/storage/gdrive/importImporta un file di Drive come riferimento gdrive://
POST/api/storage/gdrive/localize/:idScarica permanentemente un file cloud sul server locale

Metadati e Ricerca Esterna (/api/metadata)

MetodoPercorsoDescrizione
GET/api/metadata/search?q=...Cerca i metadati dell'album tra i provider esterni (MusicBrainz, Discogs, iTunes, TheAudioDB)
GET/api/metadata/lyrics?artist=...&title=...Recupera i testi delle canzoni tramite Lyrics.ovh
POST/api/metadata/applyApplica i metadati selezionati a una traccia locale

Social, Commenti e Post (/api/artists, /api/comments, /api/ap)

MetodoPercorsoDescrizione
GET/api/artists/:id/postsElenca i post pubblici di un artista
POST/api/admin/postsCrea un nuovo post (solo per amministratori)
GET/api/comments/track/:trackIdElenca i commenti per una traccia specifica
POST/api/comments/track/:trackIdAggiunge un commento (richiede autenticazione)
GET/api/ap/timeline/:artistIdAttività recente degli attori seguiti
GET/api/ap/users/:slugProfilo ActivityPub (actor) per un utente locale
POST/api/ap/inboxRiceve messaggi ActivityPub remoti in entrata
POST/api/releases/:id/reportSegnala una release per violazione di copyright o contenuti inappropriati
GET/api/admin/reportsElenca tutte le segnalazioni attive di release (solo amministratori)
DELETE/api/admin/reports/:idRisolve o archivia una segnalazione (solo amministratori)

Amministrazione (/api/admin)

MetodoPercorsoDescrizione
GET/api/admin/system/usersElenca gli utenti registrati (solo per amministratori)
POST/api/admin/system/rescanAvvia una scansione completa della libreria
POST/api/admin/upload/additional-artworksCarica più artwork/booklet aggiuntivi per una release (solo admin/artisti)
GET/api/admin/statsStatistiche di utilizzo del server e del database
GET/api/admin/system/resourcesSnapshot in tempo reale delle risorse del processo/host — CPU, memoria, RAM dell'host, dimensioni del database SQLite e attività in background in esecuzione (solo per amministratori root)
GET/api/admin/storage/overviewUtilizzo del disco a livello di istanza e suddivisione per utente (solo per amministratori root)
GET/api/admin/torrentsElenca i torrent attivi e completati
POST/api/admin/torrents/addAggiunge un link magnet alla coda di download
DELETE/api/admin/torrents/:hashRimuove un torrent e facoltativamente i relativi dati scaricati

Radio (/api/radio)

Una singola stazione sempre attiva che trasmette in streaming il catalogo dell'istanza. L'avvio/arresto è riservato agli amministratori; lo stream e i feed sono pubblici.

MetodoPercorsoDescrizione
GET/api/radioStato corrente della stazione (traccia in riproduzione, numero di ascoltatori)
POST/api/radio/startAvvia la stazione (solo per amministratori)
POST/api/radio/stopFerma la stazione (solo per amministratori)
GET/api/radio/stream.m3uPlaylist M3U per lettori esterni
GET/api/radio/feed.rssFeed RSS della stazione
GET/api/radio/hls/:filePlaylist/segmenti HLS per la riproduzione nel browser

Protocolli di Terze Parti

API Subsonic (/rest)

TuneCamp implementa il protocollo Subsonic (v1.16.1) per la compatibilità con i client mobili esistenti come DSub, Symfonium, Tempo e Substreamer.

  • Percorso di base: /rest/*.view
  • I metodi supportati includono: getAlbumList, getMusicDirectory, stream e altri.

Consulta SUBSONIC.md per la tabella di compatibilità completa.

Model Context Protocol (/api/mcp)

TuneCamp implementa il protocollo MCP in modo che i client IA esterni possano interrogare il catalogo e le statistiche del server.

MetodoPercorsoDescrizione
GET/api/mcp/sseApre il canale asincrono SSE. Richiede autenticazione Bearer tc_...
POST/api/mcp/messageInvia una richiesta JSON-RPC dal client al server

Vedi mcp-setup-guide.md per la configurazione del client.


Formato delle Risposte

Tutte le risposte delle API (eccetto gli stream audio) sono in formato JSON. In caso di errore, il server restituisce un codice di stato HTTP appropriato e un oggetto di errore:

json
{
  "error": "Messaggio di errore descrittivo"
}

Rilasciato sotto licenza MIT.