API Reference

A API do Hidraa TTS permite converter texto em fala com qualidade profissional diretamente nas suas aplicações. 1 token = 1 caractere.

https://app.hidraa.com.br
Onde encontro minha API Key?
Acesse app.hidraa.com.br → Perfil → Chave de API. Copie e use no header X-API-Key.

Autenticação

Todos os endpoints protegidos exigem autenticação via API Key. Envie pelo header X-API-Key ou como Bearer no header Authorization.

Opção 1 — Header dedicado (recomendado)

HTTP X-API-Key: hta_sua_chave_aqui

Opção 2 — Bearer Authorization

HTTP Authorization: Bearer hta_sua_chave_aqui
Sua API Key tem acesso completo à sua conta. Nunca a exponha em código client-side público ou em repositórios git.

Erros

A API retorna erros em JSON com a chave error.

StatusSignificado
400Requisição inválida — verifique os parâmetros
401API Key ausente, inválida ou expirada
402Tokens insuficientes — compre mais tokens
404Recurso não encontrado
429Rate limit atingido — aguarde antes de tentar novamente
500Erro interno — tente novamente em instantes
JSON { "error": "Tokens insuficientes", "required": 1500, "available": 800 }

Rate Limits

EndpointLimiteJanela
/api/tts/generate10 requisições1 minuto por usuário
Demais endpoints200 requisições15 minutos por IP

Síntese de Voz

POST /api/tts/generate

Converte texto em áudio WAV. Debita tokens da sua conta (mensais primeiro, depois comprados). Corpo da requisição deve ser multipart/form-data.

Parâmetros

CampoTipoObrig.Descrição
text string sim Texto a ser convertido. Máx. 5.000 caracteres.
voice string não ID da voz. Default: female_default. Ver GET /tts/voices.
engine string não omnivoice — OmniVoice AI (646 idiomas). Único engine suportado.
language string não Código do idioma. Ex: pt, en, es. Default: pt.
title string não Título para identificar no histórico. Máx. 200 chars.
refAudio file não Áudio de referência para clonagem de voz (somente OmniVoice). MP3/WAV/M4A, máx. 10MB.

Resposta 200

JSON { "id": "664a1b2c3d4e5f6a7b8c9d0e", "audioUrl": "https://s3.us-east-1.idrivee2.com/hidraa-tts/...", "audioDuration": 12, "audioSize": 380416, "tokensConsumed": 245, "balance": { "monthly": { "limit": 5000, "used": 245, "remaining": 4755 }, "purchased": { "total": 50000, "used": 0, "remaining": 50000 }, "total": 54755 } }

audioUrl é uma URL assinada válida por 1 hora. Use GET /tts/:id/url para renová-la.

GET /api/tts/voices

Lista todos os modelos de voz disponíveis. Não requer autenticação.

JSON { "voices": [ { "id": "female_default", "name": "Roberta Sales", "gender": "female", "lang": "pt", "engine": "omnivoice", "description": "Voz feminina padrão — clara e profissional", "tags": ["pt-BR", "profissional", "padrão"] }, { "id": "male_formal", "name": "Carlos", "gender": "male", "lang": "pt", "engine": "omnivoice", "description": "Voz masculina formal — ideal para corporativo", "tags": ["pt-BR", "formal", "corporativo"] } ] }

GET /api/tts/languages

Lista os idiomas suportados para síntese. Não requer autenticação.

JSON { "languages": [ { "code": "pt", "name": "Português (BR)", "flag": "🇧🇷" }, { "code": "en", "name": "English (US)", "flag": "🇺🇸" }, { "code": "es", "name": "Español", "flag": "🇪🇸" } ] }

GET /api/tts/:id/url

Gera uma nova URL assinada para um áudio já gerado. Útil quando a URL anterior expirou. Requer autenticação.

JSON { "audioUrl": "https://s3.us-east-1.idrivee2.com/hidraa-tts/...", "expiresIn": 3600 }

Histórico

GET /api/history

Lista os áudios gerados. Requer autenticação. Suporta paginação.

QueryTipoDefaultDescrição
pagenumber1Número da página
limitnumber20Itens por página (máx. 100)
favoritebooleanFiltrar favoritos

Tokens

GET /api/tokens/balance

Retorna o saldo de tokens da conta. Requer autenticação.

JSON { "monthly": { "limit": 5000, "used": 1200, "remaining": 3800 }, "purchased": { "total": 50000, "used": 400, "remaining": 49600 }, "total": 53400, "resetAt": "2026-05-01T00:00:00.000Z" }

Exemplos — cURL

Gerar áudio simples

bash curl -X POST https://app.hidraa.com.br/api/tts/generate \ -H "X-API-Key: hta_sua_chave_aqui" \ -F "text=Olá, bem-vindo ao Hidraa TTS!" \ -F "voice=female_default" \ -F "engine=omnivoice" \ -F "language=pt"

Com efeitos de emoção

bash curl -X POST https://app.hidraa.com.br/api/tts/generate \ -H "X-API-Key: hta_sua_chave_aqui" \ -F "text=[feliz]Que ótima notícia![/feliz] Bem-vindo ao Hidraa TTS." \ -F "voice=female_default" \ -F "engine=omnivoice" \ -F "language=pt" \ -F "title=Audio com efeito feliz"

Consultar saldo

bash curl https://app.hidraa.com.br/api/tokens/balance \ -H "X-API-Key: hta_sua_chave_aqui"

Exemplos — JavaScript

JavaScript const API_KEY = 'hta_sua_chave_aqui'; const BASE = 'https://app.hidraa.com.br'; // Gerar áudio async function generateAudio(text, voice = 'female_default') { const fd = new FormData(); fd.append('text', text); fd.append('voice', voice); fd.append('engine', 'omnivoice'); fd.append('language', 'pt'); const res = await fetch(`${BASE}/api/tts/generate`, { method: 'POST', headers: { 'X-API-Key': API_KEY }, body: fd }); if (!res.ok) throw new Error(`HTTP ${res.status}`); const data = await res.json(); // data.audioUrl é válido por 1 hora return data; } // Uso: generateAudio('Bem-vindo ao Hidraa TTS!').then(result => { console.log('Áudio:', result.audioUrl); console.log('Tokens usados:', result.tokensConsumed); });

Baixar o áudio como Buffer (Node.js)

Node.js const FormData = require('form-data'); const axios = require('axios'); const fs = require('fs'); async function tts(text) { const fd = new FormData(); fd.append('text', text); fd.append('voice', 'female_default'); fd.append('engine', 'omnivoice'); const { data } = await axios.post( 'https://app.hidraa.com.br/api/tts/generate', fd, { headers: { ...fd.getHeaders(), 'X-API-Key': 'hta_sua_chave_aqui' } } ); // Baixar o WAV const wav = await axios.get(data.audioUrl, { responseType: 'arraybuffer' }); fs.writeFileSync('output.wav', Buffer.from(wav.data)); console.log('Salvo em output.wav!'); }

Exemplos — Python

Python import requests API_KEY = "hta_sua_chave_aqui" BASE = "https://app.hidraa.com.br" def generate_audio(text: str, voice: str = "female_default") -> dict: response = requests.post( f"{BASE}/api/tts/generate", headers={"X-API-Key": API_KEY}, data={ "text": text, "voice": voice, "engine": "omnivoice", "language": "pt", } ) response.raise_for_status() return response.json() def download_audio(audio_url: str, output_path: str = "output.wav"): wav = requests.get(audio_url) with open(output_path, "wb") as f: f.write(wav.content) print(f"Salvo em {output_path}") # Uso: result = generate_audio("Olá! Bem-vindo ao Hidraa TTS.") print("Tokens consumidos:", result["tokensConsumed"]) download_audio(result["audioUrl"])

Consultar saldo

Python res = requests.get( f"{BASE}/api/tokens/balance", headers={"X-API-Key": API_KEY} ) balance = res.json() print(f"Tokens disponíveis: {balance['total']}")
Dúvidas? Acesse o Studio ou consulte seu saldo na seção Tokens.