curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_.../generations' \
--header 'accessKey: <your_api_key>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: 3ce1a94f6d0b28e5' \
--data '{ "quoteId": "muq_..." }'
{
"code": 1,
"message": "success",
"data": {
"projectId": "mup_...",
"jobId": "muj_...",
"jobType": "SONG",
"status": "QUEUED",
"reservedCharacters": "3330",
"createdAt": "2027-01-15T15:52:11",
"requestId": "..."
}
}
{
"code": 1,
"message": "success",
"data": {
"jobId": "muj_...",
"projectId": "mup_...",
"jobType": "SONG",
"status": "GENERATING",
"displayStage": "CREATING_MUSIC_AND_VOCALS",
"terminal": false,
"failure": null,
"attemptCount": null,
"createdAt": "2027-01-15T15:52:11",
"updatedAt": "2027-01-15T15:55:01",
"requestId": "..."
}
}
Text-to-Music
Generate the song
Accept a quote and start the song generation job.
POST
/
sound_clone
/
api
/
v1
/
music
/
projects
/
{projectId}
/
generations
curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_.../generations' \
--header 'accessKey: <your_api_key>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: 3ce1a94f6d0b28e5' \
--data '{ "quoteId": "muq_..." }'
{
"code": 1,
"message": "success",
"data": {
"projectId": "mup_...",
"jobId": "muj_...",
"jobType": "SONG",
"status": "QUEUED",
"reservedCharacters": "3330",
"createdAt": "2027-01-15T15:52:11",
"requestId": "..."
}
}
{
"code": 1,
"message": "success",
"data": {
"jobId": "muj_...",
"projectId": "mup_...",
"jobType": "SONG",
"status": "GENERATING",
"displayStage": "CREATING_MUSIC_AND_VOCALS",
"terminal": false,
"failure": null,
"attemptCount": null,
"createdAt": "2027-01-15T15:52:11",
"updatedAt": "2027-01-15T15:55:01",
"requestId": "..."
}
}
Accepts a quote, reserves its Characters and queues a
SONG job. The call returns immediately; it does not wait for the song.
Header
string
required
API key for authentication.
string
required
Unique per operation: 16–64 printable ASCII characters. Same key with the same body replays; same key with a different body is rejected with
47008.Path
string
required
The project identifier.
Body
string
required
The quote to accept. A quote can be consumed only once.
Response
string
Project identifier.
string
The song job to poll.
string
SONG.string
QUEUED.string
Characters reserved for this generation, as a string.
string
Timestamp,
yyyy-MM-dd'T'HH:mm:ss.curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_.../generations' \
--header 'accessKey: <your_api_key>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: 3ce1a94f6d0b28e5' \
--data '{ "quoteId": "muq_..." }'
{
"code": 1,
"message": "success",
"data": {
"projectId": "mup_...",
"jobId": "muj_...",
"jobType": "SONG",
"status": "QUEUED",
"reservedCharacters": "3330",
"createdAt": "2027-01-15T15:52:11",
"requestId": "..."
}
}
{
"code": 1,
"message": "success",
"data": {
"jobId": "muj_...",
"projectId": "mup_...",
"jobType": "SONG",
"status": "GENERATING",
"displayStage": "CREATING_MUSIC_AND_VOCALS",
"terminal": false,
"failure": null,
"attemptCount": null,
"createdAt": "2027-01-15T15:52:11",
"updatedAt": "2027-01-15T15:55:01",
"requestId": "..."
}
}
A replay re-reads the job: the field set and the status can differ from the first response. Use
jobId to query the job rather than parsing the replay as if it were the original create payload.Common errors
code = 47007: this quote has already been consumed. Query the existing project/job instead of submitting again.code = 47006: the quote has expired. Request a new quote.code = 47005: not enough Characters available.code = 47008: theIdempotency-Keywas reused with a different body.code = 47010: another generation is already in progress for this project.code = 47009: the project does not exist or is not owned by your account.
