OK
application/json · music-list-payload
5 fields
-
object
string
list
-
data
array of objects
20 fields
-
id
string
required
-
object
string
required
music
-
model
string
required
-
task
string
required
-
status
string
required
pendingin_progresscompletedfailedcancelledexpired
-
progress
integer
required
Estimated percent while rendering.
-
created_at
integer
required
-
completed_at
integer
-
expires_at
integer
When the audio is deleted (7 days after completion).
-
polling_url
string
required
-
stream_url
string
While pending or in_progress on a model that streams (streaming.progressive): the song as WAV as it renders, from its first byte (GET /v1/music/{id}/stream; ?index=N for another output). Send your API key.
-
timestamps_stream_url
string
While pending or in_progress on a model that streams, for a song asked for with timestamps: true: its lyric lines as they settle while it renders, then the finished timing, as server-sent events (GET /v1/music/{id}/timestamps/stream; ?index=N for another output). Send your API key.
-
queue_position
integer
Jobs ahead of this one for the same model, while pending.
-
outputs
array of objects
12 fields
-
index
integer
-
kind
string
-
role
string
What the audio is; mix is the whole song.
-
candidate
integer
Which of the n songs it belongs to.
-
content_type
string
-
format
string
-
duration_seconds
number
-
sample_rate
integer
-
channels
integer
-
seed
integer
-
metadata
object
With best_of, candidates: every take in the order rendered, {seed, score}, where score is the mean confidence aligner-1 placed its lyric lines with (0 to 1; null for a take it could not align). The output is the take with the highest score.
1 field
-
timestamps
object
When each word and line of the lyrics is sung in this output, in seconds from the start of the file. The same lines, words and unaligned lines POST /v1/audio/alignments answers with (docs/alignments), made by aligner-1 from the output's own audio and the lyrics you sent. Present only on a job that sent timestamps set to true, and only on an output that was timed; an output that could not be has none, and the job says so in warnings (timestamps_unavailable).
4 fields
-
separated
boolean
required
Whether the vocal was separated from the music before it was timed. Always true for a song.
-
lines
array of objects
required
The lines of the lyrics that were placed, in order. Section labels such as [Chorus] are not lines; they are each line's tag.
8 fields
-
words
array of objects
required
Every word of the lines above, in order, as written in the lyrics.
5 fields
-
line
integer
required
The index of the line the word is in.
-
text
string
required
The word as you wrote it.
-
start
number
required
Seconds from the start of the audio.
-
end
number
required
Seconds from the start of the audio.
-
score
number
required
The aligner's confidence in this word.
-
unaligned
array of objects
required
Lines the model could not place, listed instead of left out.
3 fields
-
line
integer
required
-
text
string
required
-
reason
string
required
Why the line was not placed.
-
written
object
A job sent write: true, once completed: the song the writer wrote from the brief, as the model was sent it.
5 fields
-
unsigned_urls
array of strings
outputs[N] is at unsigned_urls[N]; send your API key.
-
warnings
array of objects
required
3 fields
-
code
string
advisory_control (a hint the model may not follow exactly), ignored_parameter (accepted and not used), unknown_parameter (not a music request field) timestamps_unavailable (the song is complete, but this output could not be timed; nothing was billed for the timing) or best_of_unranked (no take could be aligned, so the first take is returned; every take was rendered and is billed, no alignment is).
-
field
string
-
message
string
-
usage
object
7 fields
-
cost
number
Dollars, billed_seconds times the model's price, plus timestamps.cost when the lyrics were timed, best_of.cost when takes were ranked and write.cost when the song was written.
-
duration_seconds
number
-
billed_seconds
integer
Seconds of song billed at the model's price, every take's with best_of. The timing of the lyrics is billed apart, in timestamps or best_of.
-
outputs
integer
-
timestamps
object
The timing of the lyrics, billed against aligner-1 as POST /v1/audio/alignments bills it. Present only when at least one output was timed; an output that could not be is not billed.
2 fields
-
best_of
object
A job sent best_of above 1: how many takes were rendered, and the alignment that ranked them, billed against aligner-1 as POST /v1/audio/alignments bills it. With timestamps, the kept take's timing is this alignment, billed here once and not in timestamps. A take that could not be aligned is not billed.
3 fields
-
write
object
A job sent write: true: the writer's tokens, every attempt's, billed at its row's prices as POST /v1/chat/completions bills them.
4 fields
-
error
string
The failure, when failed.
-
error_code
string
Why the job failed: invalid_request, payload_too_large, timeout, provider_error, server_error, or write_failed (write: true and no draft met the rules; not billed).
-
first_id
string
-
last_id
string
-
has_more
boolean
The API key is missing, unknown or not active. Send it as Authorization: Bearer <key>.
application/json · error-payload
1 field
-
error
object
required
4 fields
-
code
integer
required
-
message
string
required
-
type
string
required
OpenAI-style error type, kept for OpenAI SDK compatibility.
-
metadata
object
required
1 field
-
error_type
string
OpenRouter's typed error code. Chat also uses media_processing_failed for media a model cannot accept.
limit or after is malformed; the message names it
application/json · error-payload
1 field
-
error
object
required
4 fields
-
code
integer
required
-
message
string
required
-
type
string
required
OpenAI-style error type, kept for OpenAI SDK compatibility.
-
metadata
object
required
1 field
-
error_type
string
OpenRouter's typed error code. Chat also uses media_processing_failed for media a model cannot accept.