curl --location 'https://api.myvocal.ai/sound_clone/api/v1/interpretation/projects/ip_...' \
--header 'accessKey: <your_api_key>'
{
"code": 1,
"message": "success",
"data": {
"projectId": "ip_...",
"name": "Launch video ES/FR",
"state": "READY",
"summaryState": "READY",
"sourceLanguage": "en",
"sourceDurationMs": "90000",
"settingsVersion": 1,
"draftTargetLanguages": ["es", "fr"],
"source": {
"version": 1,
"state": "FROZEN",
"durationMs": "90000",
"sourceAssetId": "ia_...",
"media": { "inputFormat": "mov,mp4,m4a,3gp,3g2,mj2", "containerName": "mov,mp4,m4a,3gp,3g2,mj2", "audioStreamCount": 1, "video": true },
"availableExportFormats": ["mp3", "wav", "flac", "mp4"]
},
"targets": [
{ "targetId": "it_...", "language": "es", "state": "READY", "characters": "6000", "billingState": "SETTLED", "action": "NONE", "reservationCycle": 1, "outputAssetId": "ia_..." }
],
"jobs": [
{ "jobId": "ij_...", "projectId": "ip_...", "targetId": "it_...", "stage": "FETCH_AUDIO", "state": "READY", "nextPollAfterMs": null, "errorCode": null, "billingState": "SETTLED" }
],
"createdAt": "2027-01-15T15:50:02",
"updatedAt": "2027-01-15T15:57:12",
"requestId": "..."
}
}
Interpretation
Get an interpretation project
Read the full state of an Interpretation project: source, targets and jobs.
GET
/
sound_clone
/
api
/
v1
/
interpretation
/
projects
/
{projectId}
curl --location 'https://api.myvocal.ai/sound_clone/api/v1/interpretation/projects/ip_...' \
--header 'accessKey: <your_api_key>'
{
"code": 1,
"message": "success",
"data": {
"projectId": "ip_...",
"name": "Launch video ES/FR",
"state": "READY",
"summaryState": "READY",
"sourceLanguage": "en",
"sourceDurationMs": "90000",
"settingsVersion": 1,
"draftTargetLanguages": ["es", "fr"],
"source": {
"version": 1,
"state": "FROZEN",
"durationMs": "90000",
"sourceAssetId": "ia_...",
"media": { "inputFormat": "mov,mp4,m4a,3gp,3g2,mj2", "containerName": "mov,mp4,m4a,3gp,3g2,mj2", "audioStreamCount": 1, "video": true },
"availableExportFormats": ["mp3", "wav", "flac", "mp4"]
},
"targets": [
{ "targetId": "it_...", "language": "es", "state": "READY", "characters": "6000", "billingState": "SETTLED", "action": "NONE", "reservationCycle": 1, "outputAssetId": "ia_..." }
],
"jobs": [
{ "jobId": "ij_...", "projectId": "ip_...", "targetId": "it_...", "stage": "FETCH_AUDIO", "state": "READY", "nextPollAfterMs": null, "errorCode": null, "billingState": "SETTLED" }
],
"createdAt": "2027-01-15T15:50:02",
"updatedAt": "2027-01-15T15:57:12",
"requestId": "..."
}
}
This is the main polling endpoint for Interpretation.
Header
string
required
API key for authentication.
Path
string
required
The project identifier.
Response
string
Project identifier.
string
Project name.
string
Aggregate project state:
DRAFT, UPLOADING, PROBING, PROCESSING, PARTIAL_READY, READY, FAILED or DELETED.string
Rolled-up state:
DRAFT, PROCESSING, PARTIAL_READY, READY or FAILED.string | null
The source language, or
null when it is auto-detected.string
Detected duration of the frozen source, as a string.
number
Current draft version.
array
Current keyterms.
number | null
Current cloning strength (
0–10), or null when unset.array
The languages currently selected on the draft.
object | null
{ version, state, sourceLanguage, durationMs, sourceAssetId, cloningStrength, keyterms, media, availableExportFormats }. state is DRAFT, FROZEN or SUPERSEDED; durationMs is a string; media is { inputFormat, containerName, audioStreamCount, video, width, height, rotationDegrees }.array
{ targetId, language, state, characters, billingState, action, reservationCycle, outputAssetId }. characters is a string or null; outputAssetId is present once the language is ready.array
{ jobId, projectId, targetId, stage, state, nextPollAfterMs, errorCode, billingState }. nextPollAfterMs is currently always null.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/interpretation/projects/ip_...' \
--header 'accessKey: <your_api_key>'
{
"code": 1,
"message": "success",
"data": {
"projectId": "ip_...",
"name": "Launch video ES/FR",
"state": "READY",
"summaryState": "READY",
"sourceLanguage": "en",
"sourceDurationMs": "90000",
"settingsVersion": 1,
"draftTargetLanguages": ["es", "fr"],
"source": {
"version": 1,
"state": "FROZEN",
"durationMs": "90000",
"sourceAssetId": "ia_...",
"media": { "inputFormat": "mov,mp4,m4a,3gp,3g2,mj2", "containerName": "mov,mp4,m4a,3gp,3g2,mj2", "audioStreamCount": 1, "video": true },
"availableExportFormats": ["mp3", "wav", "flac", "mp4"]
},
"targets": [
{ "targetId": "it_...", "language": "es", "state": "READY", "characters": "6000", "billingState": "SETTLED", "action": "NONE", "reservationCycle": 1, "outputAssetId": "ia_..." }
],
"jobs": [
{ "jobId": "ij_...", "projectId": "ip_...", "targetId": "it_...", "stage": "FETCH_AUDIO", "state": "READY", "nextPollAfterMs": null, "errorCode": null, "billingState": "SETTLED" }
],
"createdAt": "2027-01-15T15:50:02",
"updatedAt": "2027-01-15T15:57:12",
"requestId": "..."
}
}
action is RETRY only for a target in FAILED_RELEASED; all other states report NONE. RECONCILING on a target or job means the outcome is still being reconciled — it is not a failure and not a refund.Common errors
code = 47102: the project does not exist or is not owned by your account. The API never distinguishes the two.
