Just drop a Suno link — get a direct MP3 URL, cover image and track metadata back in seconds.
curl "https://opensuno.vercel.app/track?url=suno.com/s/FqENDOXo6l4yKQT0"Any Suno link format works:
suno.com/s/{id} — short link
suno.com/song/{uuid} — full link
{
"status": "ok",
"data": {
"id": "453a796e-a8e2-4d28-b24f-40f956cb5321",
"suno_url": "https://suno.com/song/453a796e-...",
"mp3_url": "https://cdn1.suno.ai/453a796e-....mp3",
"cover_url": "https://cdn2.suno.ai/image_453a796e-....jpeg",
"cover_png": "https://cdn2.suno.ai/image_453a796e-....png",
"download": {
"mp3": "https://cdn1.suno.ai/453a796e-....mp3",
"cover_jpg": "https://cdn2.suno.ai/image_453a796e-....jpeg",
"cover_png": "https://cdn2.suno.ai/image_453a796e-....png"
},
"title": "Track title",
"artist": "Artist name",
"tags": "pop electronic",
"duration": 180
}
}Fields with no value are omitted — you only get what's actually there.
Play in the browser
<img id="cover">
<audio id="player" controls></audio>
<script>
fetch('https://opensuno.vercel.app/track?url=suno.com/s/xxx')
.then(r => r.json())
.then(({ data }) => {
document.getElementById('cover').src = data.cover_url;
document.getElementById('player').src = data.mp3_url;
});
</script>JavaScript
const { data } = await fetch('https://opensuno.vercel.app/track?url=suno.com/s/xxx')
.then(r => r.json());
new Audio(data.mp3_url).play();Python
import requests
data = requests.get(
'https://opensuno.vercel.app/track',
params={'url': 'suno.com/s/FqENDOXo6l4yKQT0'}
).json()['data']
print(data['mp3_url'])curl
curl "https://opensuno.vercel.app/track?url=suno.com/s/FqENDOXo6l4yKQT0"git clone https://github.com/1akpy/OpenSuno-and-ApiSuno
cd opensuno
pip install -r requirements.txt
uvicorn main:app --reloadNot affiliated with Suno Inc. · Unofficial · Personal use only