curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_.../quotes' \
--header 'accessKey: <your_api_key>' \
--header 'Content-Type: application/json' \
--data '{ "arrangementVersion": 1 }'
{
"code": 1,
"message": "success",
"data": {
"quoteId": "muq_...",
"projectId": "mup_...",
"arrangementVersion": 1,
"planKey": "POPULAR",
"ratePerMinute": 2220,
"rateVersion": "music-2026-08-26-v1",
"durationSec": 90,
"quotedCharacters": "3330",
"expiresAt": "2027-01-15T16:00:00",
"affordable": true,
"shortfall": "0",
"remainingAfterGeneration": "7170",
"balances": { "monthly": "10500", "additional": "0", "total": "10500" },
"requestId": "..."
}
}
Text-to-Music
Quote a music generation
Price the next generation for the current arrangement.
POST
/
sound_clone
/
api
/
v1
/
music
/
projects
/
{projectId}
/
quotes
curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_.../quotes' \
--header 'accessKey: <your_api_key>' \
--header 'Content-Type: application/json' \
--data '{ "arrangementVersion": 1 }'
{
"code": 1,
"message": "success",
"data": {
"quoteId": "muq_...",
"projectId": "mup_...",
"arrangementVersion": 1,
"planKey": "POPULAR",
"ratePerMinute": 2220,
"rateVersion": "music-2026-08-26-v1",
"durationSec": 90,
"quotedCharacters": "3330",
"expiresAt": "2027-01-15T16:00:00",
"affordable": true,
"shortfall": "0",
"remainingAfterGeneration": "7170",
"balances": { "monthly": "10500", "additional": "0", "total": "10500" },
"requestId": "..."
}
}
Quoting is free. It tells you the exact Characters charge, whether the account can afford it, and how long the quote stays valid.
Header
string
required
API key for authentication.
Path
string
required
The project identifier.
Body
number
required
The arrangement version to price.
Response
string
Identifier to pass to the generation endpoint.
string
Project identifier.
number
Priced arrangement version.
string
The plan the rate came from.
number
Characters per minute applied.
string
Version label of the applied rate.
number
Priced duration.
string
The price, as a JSON string.
ceil(durationSec × ratePerMinute / 60).string
When the quote stops being valid. The time to live is
quoteTtlSeconds (normally 600).boolean
Whether the balance covers the quote.
string
How much is missing;
"0" when affordable.string
Projected balance after the charge.
object
{ monthly, additional, total }, each a string.curl --location 'https://api.myvocal.ai/sound_clone/api/v1/music/projects/mup_.../quotes' \
--header 'accessKey: <your_api_key>' \
--header 'Content-Type: application/json' \
--data '{ "arrangementVersion": 1 }'
{
"code": 1,
"message": "success",
"data": {
"quoteId": "muq_...",
"projectId": "mup_...",
"arrangementVersion": 1,
"planKey": "POPULAR",
"ratePerMinute": 2220,
"rateVersion": "music-2026-08-26-v1",
"durationSec": 90,
"quotedCharacters": "3330",
"expiresAt": "2027-01-15T16:00:00",
"affordable": true,
"shortfall": "0",
"remainingAfterGeneration": "7170",
"balances": { "monthly": "10500", "additional": "0", "total": "10500" },
"requestId": "..."
}
}
Every Characters value is a JSON string, because 64-bit integers are serialized as strings to preserve precision. Convert to an integer before comparing or subtracting — never compare them as strings.
Common errors
code = 47001:arrangementVersionis missing or invalid.code = 47009: the project does not exist or is not owned by your account.code = 47003/47004: entitlement is still syncing or undecided; retry shortly.
