# Music > POST /v1/music: make full songs with Suno V6 from a description, or from your own lyrics and style. Two takes per request, MP3 files, and prices. Source: https://zurelay.com/docs/music Make full songs from a description, or from your own lyrics and style. Each request makes 2 takes for one price, and usually finishes in about a minute. `POST /v1/music` | Model | ID | Price per song | | --- | --- | --- | ## Make a song **Python** (`song.py`): ```python import os import time import requests api = "https://api.zurelay.com/v1" headers = {"Authorization": f"Bearer {os.environ['ZURELAY_API_KEY']}"} song = requests.post(f"{api}/music", headers=headers, json={ "model": "suno-v6", "prompt": "A cheerful acoustic folk song about morning coffee", }).json() while song["status"] in ("queued", "in_progress"): time.sleep(5) song = requests.get(f"{api}/music/{song['id']}", headers=headers).json() for track in song["tracks"]: print(track["title"], track["url"]) ``` **Node.js** (`song.mjs`): ```javascript const api = "https://api.zurelay.com/v1"; const headers = { Authorization: `Bearer ${process.env.ZURELAY_API_KEY}`, "Content-Type": "application/json", }; let song = await fetch(`${api}/music`, { method: "POST", headers, body: JSON.stringify({ model: "suno-v6", prompt: "A cheerful acoustic folk song about morning coffee", }), }).then((res) => res.json()); while (song.status === "queued" || song.status === "in_progress") { await new Promise((done) => setTimeout(done, 5000)); song = await fetch(`${api}/music/${song.id}`, { headers }).then((res) => res.json()); } for (const track of song.tracks) console.log(track.title, track.url); ``` **cURL**: ```bash curl https://api.zurelay.com/v1/music \ -H "Authorization: Bearer $ZURELAY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "suno-v6", "lyrics": "[Verse]\nPaper boats on the river line\n\n[Chorus]\nLet it go, let it flow", "style": "Bright synth-pop, male vocals", "exclude_style": "Acoustic guitar", "title": "Paper Boats" }' # Then poll with the id it returned curl https://api.zurelay.com/v1/music/music_abc123 \ -H "Authorization: Bearer $ZURELAY_API_KEY" ``` A song is made in the background. `POST /v1/music` answers at once with an id; ask for it with `GET /v1/music/{id}` every few seconds until its status is `completed` or `failed`. ## Parameters Send `prompt` to describe a song, or write it yourself with `lyrics` and `style`. Don't send both. - `model` (string, required): A music model ID from the table. - `prompt` (string): What the song should be, up to 200 characters. - `lyrics` (string): Your own lyrics, up to 3,000 characters. Mark sections with tags such as `[Verse]` and `[Chorus]`. - `style` (string): The genre, mood, instruments or voice, up to 120 characters. - `exclude_style` (string): Styles or instruments to keep out, up to 120 characters. - `title` (string): The song's title, up to 80 characters. - `instrumental` (boolean): No vocals. Works with `prompt`, or with `style` and no `lyrics`. ## The result **Each item in tracks** - `index` (number): Which take it is, starting at 1. Use it as `track` when downloading. - `title` (string): The song's title. The model writes one if you don't. - `duration_seconds` (number): How long the take is. - `style` (string): The style the model used, in its own words. - `lyrics` (string): The words sung. Empty for an instrumental. - `url` (string): A link to the MP3, good for 24 hours. Fetch the song again for a new one. ## Download a take `GET /v1/music/{id}/content?track=1` Streams that take's MP3. Songs are kept for 30 days. ## List your songs `GET /v1/music` Newest first. Takes `limit` (up to 100) and `after` (a song's id) to page through them. ## Good to know - You're charged only when a song is delivered. If it fails, it's free. - A request naming a famous artist, or using someone else's lyrics, may be refused with the error code `content_policy`. Describe the sound instead. - Songs vary in length, usually from under a minute to about three and a half minutes. Length can't be set. > **Not an official Suno API:** Suno has no public API of its own, and Zurelay isn't affiliated with Suno. Requests run on third-party capacity, so availability can change. Check Suno's terms before publishing or selling a song.