curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_...' \
--header 'accessKey: <your_api_key>'
{
"code": 1,
"message": "success",
"data": {
"projectId": "mup_...",
"parentProjectId": null,
"name": "Coast Road",
"projectStatus": "READY",
"arrangementVersion": 1,
"activeQuote": null,
"activeJob": { "jobId": "muj_...", "jobType": "SONG", "status": "READY", "displayStage": "FINALIZING_LIBRARY_ITEM", "terminal": true },
"readyAsset": { "assetId": "ma_...", "durationMillis": "90000", "sampleRateHz": 44100, "mimeType": "audio/mpeg" },
"lastFailure": null,
"createdAt": "2027-01-15T15:50:02",
"updatedAt": "2027-01-15T15:56:40",
"requestId": "..."
}
}
Text-to-Music
Get a music project
Read the current state of a Text-to-Music project, including its arrangement, quote and ready asset.
GET
/
sound_clone
/
api
/
v1
/
music
/
projects
/
{projectId}
curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_...' \
--header 'accessKey: <your_api_key>'
{
"code": 1,
"message": "success",
"data": {
"projectId": "mup_...",
"parentProjectId": null,
"name": "Coast Road",
"projectStatus": "READY",
"arrangementVersion": 1,
"activeQuote": null,
"activeJob": { "jobId": "muj_...", "jobType": "SONG", "status": "READY", "displayStage": "FINALIZING_LIBRARY_ITEM", "terminal": true },
"readyAsset": { "assetId": "ma_...", "durationMillis": "90000", "sampleRateHz": 44100, "mimeType": "audio/mpeg" },
"lastFailure": null,
"createdAt": "2027-01-15T15:50:02",
"updatedAt": "2027-01-15T15:56:40",
"requestId": "..."
}
}
This is the main polling endpoint for Text-to-Music.
Header
string
required
API key for authentication.
Path
string
required
The project identifier returned by create.
Response
string
Project identifier.
string | null
Set on a child version created by
POST /versions.string
Project name.
string
ARRANGEMENT_GENERATING, ARRANGEMENT_READY, GENERATING, READY or DELETED. ARRANGEMENT_READY means the arrangement is done — not that the song exists.object
The validated creative brief.
number
Current arrangement version. Use it as
expectedVersion when you edit or regenerate.object | null
The current arrangement, or
null before it exists.object | null
{ quoteId, arrangementVersion, planKey, ratePerMinute, rateVersion, durationSec, quotedCharacters, expiresAt }. quotedCharacters is a string.object | null
{ jobId, jobType, status, attemptCount, createdAt, updatedAt, displayStage, terminal }. attemptCount is a decimal string for an ARRANGEMENT job (for example "0") and null for a SONG job.object | null
Present when the song is downloadable:
{ assetId, durationMillis, sampleRateHz, mimeType }. durationMillis is a string.object | null
{ code, errorCode, retryable, action } when the work failed.string
Timestamp,
yyyy-MM-dd'T'HH:mm:ss.string
Timestamp,
yyyy-MM-dd'T'HH:mm:ss.curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_...' \
--header 'accessKey: <your_api_key>'
{
"code": 1,
"message": "success",
"data": {
"projectId": "mup_...",
"parentProjectId": null,
"name": "Coast Road",
"projectStatus": "READY",
"arrangementVersion": 1,
"activeQuote": null,
"activeJob": { "jobId": "muj_...", "jobType": "SONG", "status": "READY", "displayStage": "FINALIZING_LIBRARY_ITEM", "terminal": true },
"readyAsset": { "assetId": "ma_...", "durationMillis": "90000", "sampleRateHz": 44100, "mimeType": "audio/mpeg" },
"lastFailure": null,
"createdAt": "2027-01-15T15:50:02",
"updatedAt": "2027-01-15T15:56:40",
"requestId": "..."
}
}
Common errors
code = 47009: the project does not exist or does not belong to your account. The API never distinguishes the two.
