Saltar para o conteúdo

Voz e catálogo ​

GET /v1/chat/catalog retorna modelos públicos, vozes e preços atuais. Texto usa POST /v1/chat/completions; voz usa os endpoints abaixo.

Modelos e preços ​

Catálogo atual de modelos · preços em créditos

A carregar o catálogo…

Reconhecimento de voz ​

POST /v1/chat/transcribe aceita { "audio": "data:audio/webm;base64,..." } ou base64 simples, até 10 MB após descodificação. Devolve text e language.

Síntese de voz ​

Catálogo atual de modelos · preços em créditos

A carregar o catálogo…

Expanda um modelo para ver os nomes, IDs e idiomas das vozes ativadas. As desativadas são omitidas e não podem ser usadas em novas sínteses. Desativar um modelo exclui todas as suas vozes; voltar a ativá-lo preserva as definições individuais. Se a voz predefinida ou o seu modelo estiver desativado, é escolhida outra voz ativada. Atualize para obter as definições atuais.

POST /v1/chat/speech aceita { "text": "Hello", "voice": "speech-light:af_bella" }, até 2.000 caracteres. Sem voice, usa a voz predefinida. Use voices[].id; modelId identifica o modelo de voz e a tarifa. Os modelos de chat e voz são independentes.

A resposta contém audio (data:audio/mpeg;base64,...), voice e billing: { model, credits, characters, price, unit: "1000_characters" }. Todas as vozes, incluindo Speech Pro, devolvem MP3. Atribua audio ao src de um elemento de áudio ou descodifique o base64 após a vírgula e guarde como .mp3. Consulte o exemplo Python.

Áudio em streaming ​

Envie "stream": true para o mesmo endpoint. Speech Standard, Speech Light, Speech Pro e Speech Expressive suportam streaming; consulte speechModels[].streaming. Omitir o parâmetro ou usar false mantém a resposta JSON.

json
{ "text": "Hello. How was your day?", "voice": "speech-pro:Ashley", "stream": true }

A resposta é um fluxo binário MP3 contínuo com Content-Type: audio/mpeg, não JSON, base64 ou SSE. O proxy encaminha áudio à medida que chega; Speech Pro é convertido progressivamente para MP3. Isto não garante a latência de geração do modelo. O texto é enviado num único pedido, sem divisão automática em frases.

Com curl e FFmpeg, pode reproduzir durante a receção:

bash
curl --fail --no-buffer https://api.coldstart.win/v1/chat/speech \
  -H "Authorization: Bearer $COLDSTART_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"text":"Hello. How was your day?","voice":"speech-pro:Ashley","stream":true}' \
  | ffplay -nodisp -autoexit -f mp3 -i pipe:0

Um cliente de chamadas deve alimentar continuamente um descodificador MP3 persistente. No navegador, use response.body.getReader(); blob(), arrayBuffer() e json() esperam pela resposta completa. Os blocos de rede são intervalos arbitrários de bytes, não ficheiros MP3 autónomos. Cancele fetch e o reader quando o utilizador interromper ou desligar. A reprodução continua a exigir a interação do utilizador imposta pelo navegador.

Cabeçalhos: X-Speech-Voice (ID público codificado para URL), X-Speech-Credits, X-Speech-Characters, X-Speech-Usage-Id. O valor é o débito inicial; pedidos concluídos custam o mesmo que sem streaming. Falhas ou desconexões antes da conclusão do processamento no servidor são reembolsadas e registadas como falha. Cancelar depois não anula um débito já concluído com sucesso.

Antes de começar o áudio, os erros usam os estados HTTP e JSON habituais. Depois, uma falha fecha a ligação abruptamente. Descarte o resultado incompleto e consulte o histórico de utilização para o custo final. HTTP 200 ou o primeiro bloco não provam a conclusão com sucesso. Proxys adicionais devem desativar buffering e compressão nesta rota. A API envia X-Accel-Buffering: no e Cache-Control: no-store, no-transform.

Se a política de conteúdo recusar explicitamente o texto, ambos os modos devolvem 400 content_policy_violation antes do áudio e reembolsam o custo. Não repita automaticamente o mesmo texto; adapte-o à política. O streaming não elimina restrições de conteúdo.

Solicitações de voz são independentes. Informe explicitamente o ID público de voz desejado. O JSON contém o áudio data URI e cobrança; o streaming retorna bytes de áudio.

Custo de voz = caracteres faturáveis normalizados × tarifa do modelo / 1.000, arredondado por excesso a oito casas decimais. Speech Light, Pro e Expressive contam unidades UTF-16 (😀 vale duas), Standard conta pontos de código Unicode. speechModels[].characterCounting e billing.character_counting indicam a regra (utf16_code_units ou unicode_codepoints); billing.characters, a quantidade. Formatação e indicações de cena são removidas antes da síntese e contagem. Sínteses falhadas ou vazias são reembolsadas. Cada síntese é cobrada, mas reproduzir novamente o áudio recebido é gratuito. A consola mantém áudio em cache por mensagem e voz durante a sessão atual da página.

© 2026 ColdStart. Todos os direitos reservados.