Skip to the content
Menu: Voices

Voices

Voices: the library and your clones.

GET/v1/voices

List voices (the studio voices and your clones)

listVoicesvoices:readread: 600/min per key

The studio voices first, then your organisation's clones, oldest first.

Query parameters

  • limitinteger

    Page size, 1-200 (default 50).

  • cursorstring

    The nextCursor of the previous page.

  • kind"builtin" | "custom"

    builtin: the studio voices only; custom: your clones only.

  • gender"female" | "male"

Returns

200 A page of voices. A page: data is a list of Voice, and nextCursor fetches the next page.

Fields of data
  • idstringrequired

    Voice id (vo_…).

    pattern `^vo_.*`

  • namestringrequired
  • languagestringrequired

    Its default language (a catalogue code).

  • languagesstring[]required

    The languages this voice is promised in, as catalogue codes (GET /languages): every catalogue language for a studio voice, the ten marked for duos for a cloned voice. Set the language on the persona or the session, not by choosing another voice.

  • engine"premier" | "global"required

    The voice engine a persona speaking with this voice runs on: global for the studio voices, premier for cloned voices.

  • genderstring | nullrequired

    female or male for a studio voice; null when not known.

  • kind"builtin" | "custom"required

    builtin: a studio voice; custom: your organisation's clone.

  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

Errors

invalid_requestunauthorizedforbiddenupgrade_requiredrate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/voices?limit=20" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": [
    {
      "id": "vo_cmfq2b7x10000abcd1234",
      "name": "Zoe",
      "language": "en",
      "languages": [
        "en"
      ],
      "engine": "premier",
      "gender": "…"
    }
  ],
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d",
  "nextCursor": null
}
POST/v1/voices

Clone a voice

createVoicevoices:writeheavy: 20/min per keyIdempotency-Key

Send 10 to 60 seconds of clean speech as JSON (audioBase64), or as a multipart sample file. consent is required: whose voice it is and that they agreed (in multipart, a JSON string field). Without it the request is refused with 400 consent_required before anything is uploaded. The consent is kept as a consent record the organisation's owners can export and withdraw; withdrawing it retires the voice from new sessions. Cloning is a plan feature (403 upgrade_required).

Body

  • namestring

    Default "My voice".

  • audioBase64stringrequired

    10 to 60 seconds of clean speech: base64, or a data:audio/… URI (25 MB at most).

  • formatstring

    The sample's format when it isn't in the data URI.

  • consentConsentrequired

    Consent to clone a real person's voice or to make an avatar from their picture. Recorded with who confirmed it (the API key), when, a hashed IP address, the exact wording and its version. The organisation's owners can export records and withdraw them; a withdrawn voice or face stops starting new sessions.

Or a multipart/form-data upload:

  • namestring
  • samplestring (binary)required

    The audio file: 10 to 60 seconds of clean speech, 25 MB at most.

  • consentstringrequired

    The Consent object as a JSON string.

Returns

201 The new voice. data is Voice.

Fields of data
  • idstringrequired

    Voice id (vo_…).

    pattern `^vo_.*`

  • namestringrequired
  • languagestringrequired

    Its default language (a catalogue code).

  • languagesstring[]required

    The languages this voice is promised in, as catalogue codes (GET /languages): every catalogue language for a studio voice, the ten marked for duos for a cloned voice. Set the language on the persona or the session, not by choosing another voice.

  • engine"premier" | "global"required

    The voice engine a persona speaking with this voice runs on: global for the studio voices, premier for cloned voices.

  • genderstring | nullrequired

    female or male for a studio voice; null when not known.

  • kind"builtin" | "custom"required

    builtin: a studio voice; custom: your organisation's clone.

  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

Errors

invalid_requestconsent_requiredconsent_invalidconsent_outdatedunauthorizedforbiddenupgrade_requiredidempotency_conflictidempotency_in_progresstoo_largerate_limitedserver_errorupstream_error

Events

voice.clone.completed

Request

curl -X POST "https://app.zentiqai.com/v1/voices" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{
  "audioBase64": "…",
  "consent": {
    "attested": true,
    "subject": "myself"
  }
}'
Example answer
Response
{
  "data": {
    "id": "vo_cmfq2b7x10000abcd1234",
    "name": "Zoe",
    "language": "en",
    "languages": [
      "en"
    ],
    "engine": "premier",
    "gender": "…"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
GET/v1/voices/{id}

Get a voice

getVoicevoices:readread: 600/min per key

Path parameters

  • idstringrequired

    Voice id (vo_…); the id without its prefix is accepted too.

Returns

200 The voice. data is Voice.

Fields of data
  • idstringrequired

    Voice id (vo_…).

    pattern `^vo_.*`

  • namestringrequired
  • languagestringrequired

    Its default language (a catalogue code).

  • languagesstring[]required

    The languages this voice is promised in, as catalogue codes (GET /languages): every catalogue language for a studio voice, the ten marked for duos for a cloned voice. Set the language on the persona or the session, not by choosing another voice.

  • engine"premier" | "global"required

    The voice engine a persona speaking with this voice runs on: global for the studio voices, premier for cloned voices.

  • genderstring | nullrequired

    female or male for a studio voice; null when not known.

  • kind"builtin" | "custom"required

    builtin: a studio voice; custom: your organisation's clone.

  • createdAtstring (date-time)required

    ISO 8601 UTC timestamp.

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundgonerate_limitedserver_error

Request

curl "https://app.zentiqai.com/v1/voices/vo_123" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "id": "vo_cmfq2b7x10000abcd1234",
    "name": "Zoe",
    "language": "en",
    "languages": [
      "en"
    ],
    "engine": "premier",
    "gender": "…"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}
DELETE/v1/voices/{id}

Delete a cloned voice

deleteVoicevoices:writewrite: 120/min per key

The voice stops being offered at once. Personas that speak with it keep it until they are given another voice; its recording is removed once no persona uses it. Studio voices can't be deleted.

Path parameters

  • idstringrequired

    Voice id (vo_…); the id without its prefix is accepted too.

Returns

200 Deleted. data is object.

Fields of data
  • deletedtruerequired
  • idstringrequired

    Voice id (vo_…).

    pattern `^vo_.*`

Errors

invalid_requestunauthorizedforbiddenupgrade_requirednot_foundrate_limitedserver_error

Request

curl -X DELETE "https://app.zentiqai.com/v1/voices/vo_123" \
  -H "Authorization: Bearer $ZENTIQ_API_KEY"
Example answer
Response
{
  "data": {
    "deleted": true,
    "id": "vo_cmfq2b7x10000abcd1234"
  },
  "error": null,
  "requestId": "req_4f1c2e9a7b3d5e6f7a8b9c0d"
}