Self-hosted music streaming infrastructure. Upload, transcode to multi-bitrate AAC, and stream audio with waveform generation.
Register or log in to receive a JWT token. Include it in requests:
Authorization: Bearer <token>
Some endpoints are public (no auth). Others accept optional auth to personalize responses.
{ "email": "you@example.com", "password": "...", "displayName": "DJ Name" }
{ "token": "eyJ...", "user": { "id": 1, "email": "...", "display_name": "..." } }
{ "email": "you@example.com", "password": "..." }
{ "token": "eyJ...", "user": { "id": 1, "email": "...", "display_name": "..." } }
{ "user": { "id": 1, "email": "...", "display_name": "..." } }
Content-Type: multipart/form-data file: (binary) title: "Track Title" artistName: "Artist Name" album: "Optional Album" genre: "Optional Genre"
{
"track": {
"id": "a1b2c3...",
"title": "Track Title",
"artist_name": "Artist Name",
"status": "processing"
}
}
uploading → processing →
ready or error
?page=0&limit=20 (max limit: 100)
{ "tracks": [...], "total": 42 }
?page=0&limit=20 (max limit: 50)
{ "tracks": [{ "id": "...", "title": "...", "artist_name": "...", "play_count": 10, ... }] }
{ "tracks": [...] }
?q=search+term (min 2 chars, returns max 30 results)
{ "tracks": [...] }
{
"track": {
"id": "a1b2c3...",
"title": "Track Title",
"artist_name": "Artist",
"duration_seconds": 210.5,
"play_count": 42,
"waveform_data": "/audio/a1b2c3.../waveform.png",
"cover_art": "/audio/a1b2c3.../cover.jpg",
"status": "ready"
}
}
?q=256k (options: 128k, 256k, 320k — default: 256k)
const audio = new Audio(); audio.src = 'https://api.music.domainless.fun/api/tracks/TRACK_ID/stream?q=320k'; audio.play();
204.
{ "duration": 45.2 }
{ "ok": true }
{ "title": "My Playlist", "description": "Optional", "isPublic": true }
{ "playlist": { "id": 1, "title": "My Playlist", "track_count": 0, ... } }
{ "playlists": [...] }
?page=0&limit=20
{ "playlists": [{ "id": 1, "title": "...", "creator_name": "...", "track_count": 5, ... }] }
{ "playlist": { "id": 1, "title": "...", "tracks": [...], "track_count": 5, ... } }
{ "title": "New Title", "description": "...", "isPublic": false }
{ "ok": true }
{ "trackId": "a1b2c3..." }
{ "trackId": "a1b2c3..." }
{ "liked": true, "count": 42 }
{ "liked": false, "count": 41 }
?page=0&limit=20
{ "tracks": [...], "total": 15 }
{ "following": true, "followers": 100 }
{ "following": false, "followers": 99 }
{
"artist": {
"id": 1,
"display_name": "Artist Name",
"track_count": 12,
"total_plays": 5000,
"followers": 100,
"following": false,
"tracks": [...]
}
}