Realtime TTS-2 is live. Built for realtime conversation that feels human. Read the Realtime TTS-2 announcement

PvcVoiceService

Train a PVC voice

Start training a professional voice clone (PVC) from its uploaded samples, then poll the voice to track progress.

POST/voices/v1/pvcVoices/{pvcVoiceId}:train

This endpoint does not return an Operation. There is no separate operation ID to look up. Poll Get a PVC voice directly.

Training requires at least 600 seconds (10 minutes) of sample audio in total, measured after any trims.

Your plan limits how often you can start training. Exceeding that rate returns 429, with an error message that names the limit. Wait before trying again rather than retrying in a loop. See Plan limits for each plan's allowance.

A voice in PVC_VOICE_STATE_READY cannot be trained again. The request returns 409. To retrain, create a new PVC voice. See Retrain or remove a trained voice.

How long training takes

Training time depends on how much audio you uploaded, not how many samples it is split across. As a rough guide, an hour of audio takes about 10-30 minutes to train. It may take longer under heavy platform demand.

Model training is capped at roughly 2800 seconds of audio and 1000 MB of source data per run. Audio beyond the cap is silently truncated rather than rejected. Keep total sample audio comfortably below the cap when uploading long recordings.

Authorizations

Authorizationstringrequired

Your API key. Read permissions are required for GET endpoints. Write permissions are required for POST, PATCH, and DELETE endpoints.

For Basic authentication, please populate Basic $INWORLD_API_KEY. You can create a key in one command with the Inworld CLI: inworld workspace add-key.

Path Parameters

pvcVoiceIdstringrequired

pvcVoiceId of the draft PVC voice to train.

Response

200 - application/json

namestring

Resource name. Format: workspaces/{workspace}/pvcVoices/{voice}.

pvcVoiceIdstring

PVC voice ID, derived from displayName at creation time. Use this value as {pvcVoiceId} on every other PVC endpoint. It is not the voice ID used for synthesis; see customVoice.

displayNamestring

The human-readable name shown anywhere the voice is listed or selected.

descriptionstring

Description of the voice.

tagsstring[]

User-defined tags.

langCodeenum<string>

Legacy enum form of the voice's language, such as EN_US. Returned alongside languageCode. Immutable after creation.

Available options:EN_USZH_CNKO_KRJA_JPRU_RUAUTOIT_ITES_ESPT_BRDE_DEFR_FRAR_SAPL_PLNL_NLHI_INHE_IL

languageCodestring

The voice's language as a BCP-47-shaped locale string, e.g. en-US. Immutable after creation.

stateenum<string>

Lifecycle state of a PVC voice.

  • PVC_VOICE_STATE_DRAFT: Editable. Samples can be added, trimmed, or removed, and metadata can be updated.
  • PVC_VOICE_STATE_QUEUED: Training requested; waiting for a training slot.
  • PVC_VOICE_STATE_TRAINING: Actively training.
  • PVC_VOICE_STATE_READY: Training succeeded. Usable for TTS synthesis. It's permanent and cannot be deleted through this API.
  • PVC_VOICE_STATE_FAILED: Training failed. Editing the voice (e.g. renaming it, or adding/removing a sample) returns it to PVC_VOICE_STATE_DRAFT with its remaining samples intact.

Available options:PVC_VOICE_STATE_UNSPECIFIEDPVC_VOICE_STATE_DRAFTPVC_VOICE_STATE_QUEUEDPVC_VOICE_STATE_TRAININGPVC_VOICE_STATE_READYPVC_VOICE_STATE_FAILED

failureobject

Populated on a PVC voice when its state is PVC_VOICE_STATE_FAILED.

Show child attributes

reasonstring

Machine-readable failure code, such as PVC_VOICE_FAILURE_REASON_INVALID_SAMPLES. New values may be added over time, so don't validate against a hardcoded list. Fall back to displaying message for codes you don't recognize.

messagestring

Human-readable, scrubbed failure message. Never contains uploaded audio, filenames, or transcripts.

customVoicestring

Resource name of the trained voice, in the format workspaces/{workspace}/voices/{voice}. Set once the voice is PVC_VOICE_STATE_READY. Manage and use the trained voice through the Voices API.

samplesobject[]

Audio samples currently attached to the voice.

Show child attributes

sampleIdstring

Sample ID. Use this value as {sampleId} when trimming or deleting the sample.

namestring

Resource name. Format: workspaces/{workspace}/pvcVoices/{voice}/samples/{sample}.

fileNamestring

Original file name of the uploaded audio.

sizeBytesstring

Size of the uploaded file, in bytes. Encoded as a string, like other 64-bit integers in this API.

durationSecsnumber

Analyzed duration of the sample, in seconds, before any trim is applied.

mimeTypeenum<string>

Detected audio format, sniffed from the file's byte content.

Available options:audio/wavaudio/webmaudio/mpeg

hashstring

Base64-encoded MD5 of the stored object, for verifying upload integrity against the source file.

removeBackgroundNoiseboolean

Whether background-noise removal is applied to this sample during training, as set by remove_background_noise on upload.

trimStartMsinteger

Trim start offset in milliseconds, if set.

trimEndMsinteger

Trim end offset in milliseconds, if set.

roleenum<string>

How the sample is used in training. PVC_SAMPLE_ROLE_UNSPECIFIED is treated as PVC_SAMPLE_ROLE_TRAINING (ordinary training material). PVC_SAMPLE_ROLE_GOLDEN marks a positive reference whose character training should prefer; PVC_SAMPLE_ROLE_AVOID marks an advisory negative reference. New values may be added over time.

Available options:PVC_SAMPLE_ROLE_UNSPECIFIEDPVC_SAMPLE_ROLE_TRAININGPVC_SAMPLE_ROLE_GOLDENPVC_SAMPLE_ROLE_AVOID

createTimestring

updateTimestring