KanutusDocs
kanutus.com Entrar / Criar contaEntrar

Vozes

GET/v1/voices

Listar vozes (seus clones e as vozes genéricas escolhidas)

Permissão: voices:read

Resposta 200

NomeTipoDescrição
data obrigatórioobject[]
data[].id obrigatóriostring
data[].name obrigatóriostring
data[].kind obrigatório"clone" | "generic"
data[].active obrigatórioboolean
data[].gender obrigatório"male" | "female" | null
data[].status"awaiting_consent" | "processing" | "ready" | "failed" | "revoked" | "expired"Voices created through the API (consent flow). ready = usable in say.
data[].consent_urlstring | nullSend this link to the person whose voice it is. They sign in with the email of the request, read the consent sentence and record live. Shown while awaiting consent.
data[].languagestring
data[].personobject
data[].person.name obrigatóriostring
data[].person.email obrigatóriostringMasked
data[].failure_codestring | null
data[].expires_atstring | null
data[].created_atstring
data[].livemodeboolean

Exemplo

curl
curl "https://api.kanutus.com/v1/voices" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

GET /v1/voices

Respostas por status

200 Voices
200
{
  "data": [
    {
      "id": "string",
      "name": "string",
      "kind": "clone",
      "active": true,
      "gender": "male",
      "status": "awaiting_consent",
      "consent_url": "https://example.com",
      "language": "string",
      "person": {
        "name": "string",
        "email": "string"
      },
      "failure_code": "string",
      "expires_at": "string",
      "created_at": "string",
      "livemode": true
    }
  ]
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

POST/v1/voices

Clonar uma voz com consentimento verificável: devolve um link para a pessoa ler a frase de consentimento e gravar ao vivo Em breve

Permissão: voices:clone

Em produção responde 501 (em breve). Já dá para testar com uma chave kt_test_ (simulador).

Parâmetros

NomeTipoDescrição
idempotency-key obrigatórioheader · stringUnique key per create request; retries with the same key return the same result.

Corpo da requisição

NomeTipoDescrição
name obrigatóriostringlength 1–60
language obrigatóriostringLanguage the person will read in (consent sentence: pt, en or es; others read in English).
person obrigatórioobject
person.name obrigatóriostringlength 1–80
person.email obrigatóriostringThe person signs in with this email to give consent and record. · length 0–254

Resposta 202

NomeTipoDescrição
id obrigatóriostring
name obrigatóriostring
kind obrigatório"clone" | "generic"
active obrigatórioboolean
gender obrigatório"male" | "female" | null
status"awaiting_consent" | "processing" | "ready" | "failed" | "revoked" | "expired"Voices created through the API (consent flow). ready = usable in say.
consent_urlstring | nullSend this link to the person whose voice it is. They sign in with the email of the request, read the consent sentence and record live. Shown while awaiting consent.
languagestring
personobject
person.name obrigatóriostring
person.email obrigatóriostringMasked
failure_codestring | null
expires_atstring | null
created_atstring
livemodeboolean

Exemplo

curl
curl -X POST "https://api.kanutus.com/v1/voices" \
  -H "Authorization: Bearer $KANUTUS_API_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"name":"Ana (atendimento)","language":"pt","person":{"name":"Ana Ribeiro","email":"ana@vertice.com"}}'
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

POST /v1/voices

Respostas por status

202 Waiting for the person's consent (status awaiting_consent)
202
{
  "id": "string",
  "name": "string",
  "kind": "clone",
  "active": true,
  "gender": "male",
  "status": "awaiting_consent",
  "consent_url": "https://example.com",
  "language": "string",
  "person": {
    "name": "string",
    "email": "string"
  },
  "failure_code": "string",
  "expires_at": "string",
  "created_at": "string",
  "livemode": true
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

409 Conflict (idempotency or state)
409 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 409,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

501 Not available yet in live mode (use a kt_test_ key)
501 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 501,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

GET/v1/voices/catalog

Vozes genéricas que você pode escolher (sem consentimento)

Permissão: voices:read

Resposta 200

NomeTipoDescrição
data obrigatórioobject[]
data[].id obrigatóriostring
data[].name obrigatóriostring
data[].gender obrigatório"male" | "female"
data[].accent obrigatóriostring | null
data[].description obrigatóriostring | null
data[].preview_url obrigatóriostring | null

Exemplo

curl
curl "https://api.kanutus.com/v1/voices/catalog" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

GET /v1/voices/catalog

Respostas por status

200 Catalog
200
{
  "data": [
    {
      "id": "string",
      "name": "string",
      "gender": "male",
      "accent": "string",
      "description": "string",
      "preview_url": "string"
    }
  ]
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

POST/v1/voices/generic

Escolher uma voz genérica do catálogo (entra nas suas vozes)

Permissão: voices:write

Corpo da requisição

NomeTipoDescrição
voice_id obrigatóriostring

Resposta 200

NomeTipoDescrição
id obrigatóriostring
name obrigatóriostring
kind obrigatório"clone" | "generic"
active obrigatórioboolean
gender obrigatório"male" | "female" | null
status"awaiting_consent" | "processing" | "ready" | "failed" | "revoked" | "expired"Voices created through the API (consent flow). ready = usable in say.
consent_urlstring | nullSend this link to the person whose voice it is. They sign in with the email of the request, read the consent sentence and record live. Shown while awaiting consent.
languagestring
personobject
person.name obrigatóriostring
person.email obrigatóriostringMasked
failure_codestring | null
expires_atstring | null
created_atstring
livemodeboolean

Exemplo

curl
curl -X POST "https://api.kanutus.com/v1/voices/generic" \
  -H "Authorization: Bearer $KANUTUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"voice_id":"generic_EXAVITQu4vr4xnSDxMaL"}'
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

POST /v1/voices/generic

Respostas por status

200 Chosen
200
{
  "id": "string",
  "name": "string",
  "kind": "clone",
  "active": true,
  "gender": "male",
  "status": "awaiting_consent",
  "consent_url": "https://example.com",
  "language": "string",
  "person": {
    "name": "string",
    "email": "string"
  },
  "failure_code": "string",
  "expires_at": "string",
  "created_at": "string",
  "livemode": true
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

409 Conflict (idempotency or state)
409 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 409,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

GET/v1/voices/{id}

Ler uma voz (e o status do consentimento)

Permissão: voices:read

Parâmetros

NomeTipoDescrição
id obrigatóriopath · string

Resposta 200

NomeTipoDescrição
id obrigatóriostring
name obrigatóriostring
kind obrigatório"clone" | "generic"
active obrigatórioboolean
gender obrigatório"male" | "female" | null
status"awaiting_consent" | "processing" | "ready" | "failed" | "revoked" | "expired"Voices created through the API (consent flow). ready = usable in say.
consent_urlstring | nullSend this link to the person whose voice it is. They sign in with the email of the request, read the consent sentence and record live. Shown while awaiting consent.
languagestring
personobject
person.name obrigatóriostring
person.email obrigatóriostringMasked
failure_codestring | null
expires_atstring | null
created_atstring
livemodeboolean

Exemplo

curl
curl "https://api.kanutus.com/v1/voices/kqz-mbdt-wpa" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

GET /v1/voices/{id}

Respostas por status

200 Voice
200
{
  "id": "string",
  "name": "string",
  "kind": "clone",
  "active": true,
  "gender": "male",
  "status": "awaiting_consent",
  "consent_url": "https://example.com",
  "language": "string",
  "person": {
    "name": "string",
    "email": "string"
  },
  "failure_code": "string",
  "expires_at": "string",
  "created_at": "string",
  "livemode": true
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

404 Not found
404 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 404,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

DELETE/v1/voices/{id}

Apagar uma voz: revoga um clone consentido ou remove uma voz genérica escolhida

Permissão: voices:write

Parâmetros

NomeTipoDescrição
id obrigatóriopath · string

Resposta 200

NomeTipoDescrição
id obrigatóriostring
deleted obrigatóriotrue

Exemplo

curl
curl -X DELETE "https://api.kanutus.com/v1/voices/kqz-mbdt-wpa" \
  -H "Authorization: Bearer $KANUTUS_API_KEY"
Testar agora

Roda no seu navegador contra a API de verdade. Use uma chave kt_test_: nada é cobrado. A chave fica só nesta aba.

DELETE /v1/voices/{id}

Respostas por status

200 Deleted
200
{
  "id": "string",
  "deleted": true
}
400 Invalid request
400 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 400,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

401 Missing, invalid, expired or revoked credential
401 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 401,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

403 Missing permission, blocked or not allowed
403 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 403,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

404 Not found
404 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 404,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro

429 Rate limit exceeded (see RateLimit-* and Retry-After headers)
429 application/problem+json
{
  "type": "https://docs.kanutus.com/errors",
  "title": "<code>",
  "status": 429,
  "code": "<code>",
  "message": "…",
  "request_id": "req_…"
}

Ver todos os códigos de erro