curl -X POST https://api.60db.ai/songs \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"mode": "simple",
"prompt": "upbeat lo-fi hip hop with jazzy chords"
}'
const song = await client.music.create({
mode: 'simple',
prompt: 'upbeat lo-fi hip hop with jazzy chords'
});
console.log('Song ID:', song.data.songs[0].id);
song = client.music.create(
mode='simple',
prompt='upbeat lo-fi hip hop with jazzy chords'
)
print('Song ID:', song['data']['songs'][0]['id'])
{
"success": true,
"message": "Your song is being created",
"data": {
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"songs": [
{
"id": "song-550e8400-e29b-41d4-a716-446655440001",
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"variant_index": 0,
"status": "submitted",
"progress": null,
"mode": "simple",
"title": null,
"prompt": "upbeat lo-fi hip hop with jazzy chords",
"tags": null,
"instrumental": false,
"vocal_gender": null,
"voice_id": null,
"duration_seconds": null,
"audio_url": null,
"liked": false,
"played": false,
"error_message": null,
"created_at": "2026-09-24T10:30:00Z",
"completed_at": null
}
],
"warnings": []
}
}
Music
Create Song
Generate a new song asynchronously
POST
/
songs
curl -X POST https://api.60db.ai/songs \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"mode": "simple",
"prompt": "upbeat lo-fi hip hop with jazzy chords"
}'
const song = await client.music.create({
mode: 'simple',
prompt: 'upbeat lo-fi hip hop with jazzy chords'
});
console.log('Song ID:', song.data.songs[0].id);
song = client.music.create(
mode='simple',
prompt='upbeat lo-fi hip hop with jazzy chords'
)
print('Song ID:', song['data']['songs'][0]['id'])
{
"success": true,
"message": "Your song is being created",
"data": {
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"songs": [
{
"id": "song-550e8400-e29b-41d4-a716-446655440001",
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"variant_index": 0,
"status": "submitted",
"progress": null,
"mode": "simple",
"title": null,
"prompt": "upbeat lo-fi hip hop with jazzy chords",
"tags": null,
"instrumental": false,
"vocal_gender": null,
"voice_id": null,
"duration_seconds": null,
"audio_url": null,
"liked": false,
"played": false,
"error_message": null,
"created_at": "2026-09-24T10:30:00Z",
"completed_at": null
}
],
"warnings": []
}
}
Create a new song with a text prompt (simple mode) or detailed controls (advanced mode). The song is generated asynchronously — the response returns immediately with a pending song ID that you can poll for status.
Song Object:
Request
Headers
string
required
Bearer token with your API key
string
required
application/json (or multipart/form-data if uploading lyrics_file)
Body
string
default:"advanced"
simple or advanced. Simple: one-line description, we write lyrics. Advanced: full control.string
required
1–2000 characters. Simple mode: song description. Advanced mode: musical style (genre, mood, instruments, BPM).
string
Your own lyrics (≤12000 chars). Optional
[Verse]/[Chorus] section tags allowed. Advanced mode only; exactly one lyrics source.string
Generate lyrics from a description (≤2000 chars). E.g., “Write about summer freedom”. Advanced mode only; exactly one lyrics source.
file
Multipart upload of a .txt file (≤64 KB). Advanced mode only; exactly one lyrics source.
boolean
default:"false"
If true, song has no vocals;
[Instrumental] tag is sent automatically. Allows skipping lyrics in advanced mode.string
Male or Female. Optional.string
default:""
From
GET /songs/voices: catalog voice or saved voice owned by your workspace. Optional.string
Styles to exclude (≤1000 chars). Optional.
string
Extra style tags (≤1000 chars). Optional.
integer
10–600 seconds. The model treats it as a hint. Optional.
string
Digit string (≤19 digits, ≤2^63-1) for repeatable results. Must be a string, not a number. Optional.
string
Display title (≤200 chars). If omitted, a title is auto-generated from lyrics. Optional.
Response
boolean
Always true on 201
string
“Your song is being created”
object
id (uuid), batch_id (uuid), variant_index (int), status (submitted|running|succeeded|failed),
progress (string|null, e.g. "writing lyrics"), mode, title (string|null), prompt, tags,
instrumental (bool), vocal_gender, voice_id, duration_seconds (null until ready), audio_url (null until ready),
liked (bool), played (bool), error_message (null unless failed), created_at, completed_at
Errors
| Status | Code | Meaning |
|---|---|---|
| 400 | Validation error | Invalid prompt, missing field, or both lyrics and lyrics_prompt sent |
| 403 | VOICE_NOT_ACCESSIBLE | The voice ID isn’t usable by your workspace |
| 409 | GENERATION_IN_PROGRESS | A song is already being generated; try again in 2 minutes |
| 429 | Rate limited | Too many requests |
| 502/503 | Service unavailable | Temporary outage |
Example
curl -X POST https://api.60db.ai/songs \
-H "Authorization: Bearer your-api-key" \
-H "Content-Type: application/json" \
-d '{
"mode": "simple",
"prompt": "upbeat lo-fi hip hop with jazzy chords"
}'
const song = await client.music.create({
mode: 'simple',
prompt: 'upbeat lo-fi hip hop with jazzy chords'
});
console.log('Song ID:', song.data.songs[0].id);
song = client.music.create(
mode='simple',
prompt='upbeat lo-fi hip hop with jazzy chords'
)
print('Song ID:', song['data']['songs'][0]['id'])
{
"success": true,
"message": "Your song is being created",
"data": {
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"songs": [
{
"id": "song-550e8400-e29b-41d4-a716-446655440001",
"batch_id": "550e8400-e29b-41d4-a716-446655440000",
"variant_index": 0,
"status": "submitted",
"progress": null,
"mode": "simple",
"title": null,
"prompt": "upbeat lo-fi hip hop with jazzy chords",
"tags": null,
"instrumental": false,
"vocal_gender": null,
"voice_id": null,
"duration_seconds": null,
"audio_url": null,
"liked": false,
"played": false,
"error_message": null,
"created_at": "2026-09-24T10:30:00Z",
"completed_at": null
}
],
"warnings": []
}
}