REST API · v2

Spotix API

Public REST API buat search Spotify, ambil detail track/playlist, dan download MP3. Langsung scrape Spotify internal API — no API key needed. Built by @kasanvx.

Base URLhttps://spotify.khasan.siteproduction
Devhttp://localhost:3000local

Authentication

No API key required

Semua endpoint public. Rate limit berlaku per IP. curl, axios, python semua bisa — yang diblock cuma attack tools (sqlmap, nuclei, dll).

Rate Limits

Per IP, sliding window 60 detik. Header X-RateLimit-Remaining ada di setiap response. Returns 429 kalau over limit.

30req / min/api/search
30req / min/api/track
20req / min/api/playlist
10req / min/api/stream
GET

/api/track

Ambil detail track by Spotify track ID atau URL/URI.

Parameters

ParamTypeRequiredDescription
idstringrequiredSpotify track ID, URL (open.spotify.com/track/...), atau URI (spotify:track:...)

Contoh Request

by ID
curl "https://spotify.khasan.site/api/track?id=4k3xDpAdBuM17mNNHhOZkK"
by URL
curl "https://spotify.khasan.site/api/track?id=https%3A%2F%2Fopen.spotify.com%2Ftrack%2F4k3xDpAdBuM17mNNHhOZkK"

Response

200 OK
{
  "status": true,
  "data": {
    "id": "4k3xDpAdBuM17mNNHhOZkK",
    "uri": "spotify:track:4k3xDpAdBuM17mNNHhOZkK",
    "url": "https://open.spotify.com/track/4k3xDpAdBuM17mNNHhOZkK",
    "name": "Blinding Lights",
    "duration_ms": 200040,
    "playcount": 3800000000,
    "explicit": false,
    "track_number": 1,
    "album": {
      "id": "...", "name": "After Hours",
      "type": "ALBUM", "release_year": 2020,
      "images": [{ "url": "https://i.scdn.co/image/...", "width": 640, "height": 640 }],
      "color": "#1a1a2e"
    },
    "artists": [{ "id": "...", "name": "The Weeknd", "images": [...] }]
  },
  "response_ms": 712
}
GET

/api/playlist

Ambil info + semua tracks dari Spotify playlist by ID atau URL.

Parameters

ParamTypeRequiredDescription
idstringrequiredSpotify playlist ID atau URL (open.spotify.com/playlist/...)

Contoh Request

by ID
curl "https://spotify.khasan.site/api/playlist?id=4IfUIdWEonPys9mYs7zXna"
by URL
curl "https://spotify.khasan.site/api/playlist?id=https%3A%2F%2Fopen.spotify.com%2Fplaylist%2F4IfUIdWEonPys9mYs7zXna"

Response

200 OK
{
  "status": true,
  "data": {
    "id": "4IfUIdWEonPys9mYs7zXna",
    "name": "Playlist Name",
    "description": "...",
    "followers": 4820,
    "images": [{ "url": "https://...", "width": 640, "height": 640 }],
    "owner": {
      "display_name": "Spotify", "username": "spotify"
    },
    "tracks": [
      {
        "id": "...", "name": "Track Name", "duration_ms": 210000, "explicit": false,
        "album": { "id": "...", "name": "Album", "images": [...] },
        "artists": [{ "id": "...", "name": "Artist" }]
      }
    ]
  },
  "response_ms": 1340
}
404 — private / not found
{ "status": false, "message": "Playlist not found or private" }
GET

/api/stream

Proxy & stream audio MP3. download_url dari /api/search sudah siap pakai — tinggal gunakan langsung sebagai src audio atau download link.

Parameters

ParamTypeRequiredDescription
tokenstringrequiredToken dari download_url field di response /api/search
filenamestringoptionalNama file download tanpa ekstensi

Contoh Penggunaan

JavaScript — search lalu download
// Step 1: search/get track
const { data: { result } } = await (await fetch('/api/search?q=blinding+lights')).json()

// Step 2: download_url sudah siap
// Play langsung
const audio = new Audio(result.download_url)
audio.play()

// Atau trigger download
const a = document.createElement('a')
a.href = result.download_url
a.download = result.title + '.mp3'
a.click()

Error Codes

Semua error return { "status": false, "message": "..." }

CodeArti
400Parameter kurang atau invalid
403IP/UA diblokir (attack tools, Tor exit nodes)
404Track/playlist/album tidak ditemukan
405Method tidak diizinkan (bukan GET)
429Rate limit exceeded — tunggu 60 detik
502Upstream audio source error
504Timeout (15s search / 30s stream)
500Internal server error