Generate lyrics (free)

June 3, 2026

Table of contents

  1. Request Headers
  2. Request Body
  3. Responses
  4. Model
  5. Examples
  6. Try It

Generate [Verse]/[Chorus]-structured lyrics from a prompt, without producing audio (no credits burned).

Flow Music has no dedicated lyrics-only model β€” this endpoint drives the song agent to write lyrics (and a matching sound_prompt) without generating audio. It reads the agent’s structured lyrics__create result, so lyrics come back reliably even when the agent’s chat reply is conversational; a 422 only happens when the agent produced no lyrics at all. For lyrics bound to an actual track, use POST /music β€” every generated clip returns clip.lyrics.

https://api.useapi.net/v1/flowmusic/music/lyrics

Request Headers

Authorization: Bearer {API token}
Content-Type: application/json
# Alternatively you can use multipart/form-data
# Content-Type: multipart/form-data

Request Body

{
  "prompt": "a nostalgic song about a long road trip home",
  "structure": "Verse 1 / Chorus / Verse 2 / Chorus / Bridge / Outro"
}
  • email is optional, which configured account to use.
  • prompt is required, the song concept. 1–2,000 characters.
  • structure is optional, a free-text section scaffold to shape the layout. ≀2,000 characters.

Responses

  • 200 OK

    {
      "email": "[email protected]",
      "title": "Road Home",
      "lyrics": "[Verse 1]\nHighway humming under the wheels\n[Chorus]\nTaking the long way home",
      "sound_prompt": "Indie folk, warm acoustic guitar, 80 BPM, intimate male vocal",
      "source": "lyrics-create",
      "audio_create_song_fired": false,
      "credits_burned": 0
    }
    
  • 401 Unauthorized β€” invalid API token.

  • 422 β€” rare: the agent produced no lyrics at all (no structured result and no tagged text block). Retry, or use POST /music and read clip.lyrics.

    { "email": "[email protected]", "error": { "code": "no_lyrics", "message": "..." }, "agent_text": "..." }
    
  • 596 Account Error

    The account targeted by email is in an error state and can’t be used β€” re-add it via POST /accounts. The error field returns whatever reason was recorded for the account.

    {
      "error": "Account [email protected] in error state: refresh token rejected",
      "code": 596
    }
    

Model

{
  email: string
  title: string | null
  lyrics: string                   // [Verse]/[Chorus]-tagged
  sound_prompt: string | null      // a matching style/production prompt, when the agent wrote one
  source: string                   // 'lyrics-create' (agent's structured result) | 'text-part-fallback'
  audio_create_song_fired: boolean // true only if the agent also kicked off a render (normally false)
  credits_burned: number | null    // 0 (free); null if a song render unexpectedly fired
}

Examples

  • curl -H "Content-Type: application/json" \
         -H "Authorization: Bearer YOUR_API_TOKEN" \
         -X POST "https://api.useapi.net/v1/flowmusic/music/lyrics" \
         -d '{ "prompt": "a nostalgic song about a long road trip home" }'
    
  • import requests
    response = requests.post(
        'https://api.useapi.net/v1/flowmusic/music/lyrics',
        headers={'Authorization': 'Bearer YOUR_API_TOKEN'},
        json={'prompt': 'a nostalgic song about a long road trip home'}
    )
    print(response.status_code, response.json())
    

Try It