DEV Community

Fred Santos
Fred Santos

Posted on

Best Text-to-Speech APIs for Portuguese in 2025 (IteraTools vs ElevenLabs vs OpenAI TTS)

Best Text-to-Speech APIs for Portuguese in 2025 (IteraTools vs ElevenLabs vs OpenAI TTS)

Building a voice feature for a Brazilian or Portuguese app? The quality of text-to-speech in Portuguese varies dramatically between providers. Some APIs sound robotic, others require complex SDKs, and pricing can spiral quickly at production volumes.

This guide compares the top TTS API options with a focus on Portuguese language quality, developer experience, and cost-effectiveness.

What to Consider When Choosing a TTS API

  • Portuguese quality: Does it handle regional accents (BR vs PT)? How natural are the prosody and intonation?
  • Latency: Streaming vs batch — do you need real-time audio or async generation?
  • Voice selection: Fixed voices or cloning capabilities?
  • Format support: MP3, WAV, OGG — and what sample rates?
  • Price at scale: Cost per character or per request matters at production volumes.
  • Setup complexity: API key only vs SDK installation required.

Comparison Table

Tool Price Portuguese Quality Setup Limitations
IteraTools ~$0.001/request (credits) Good (Neural voices, pt-BR) API key, plain HTTP Voice cloning not available
ElevenLabs $0.30/1K chars (Starter) Excellent (cloning, multi-accent) API key Expensive at scale
OpenAI TTS $0.015/1K chars Good (pt-BR supported) API key Limited voice customization
Azure TTS $4/1M chars Excellent (200+ pt voices) Complex SDK + account Enterprise setup overhead
Google TTS $4/1M chars Very Good SDK required Requires GCP account

IteraTools TTS — How to Use It

curl -X POST https://api.iteratools.com/v1/tts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Olá! Bem-vindo ao nosso sistema de atendimento automático.",
    "language": "pt-BR",
    "voice": "antonio",
    "format": "mp3"
  }' \
  --output audio.mp3
Enter fullscreen mode Exit fullscreen mode

Response is the audio file directly (binary), or you can get a URL:

curl -X POST https://api.iteratools.com/v1/tts \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "text": "Seu pedido foi confirmado com sucesso.",
    "language": "pt-BR",
    "voice": "antonio",
    "format": "mp3",
    "return_url": true
  }'
Enter fullscreen mode Exit fullscreen mode
{
  "url": "https://cdn.iteratools.com/audio/tts/xyz789.mp3",
  "duration_seconds": 2.4,
  "credits_used": 1
}
Enter fullscreen mode Exit fullscreen mode

Complete Python Example

import requests
from pathlib import Path

API_KEY = "your_api_key_here"

def text_to_speech(
    text: str,
    output_file: str = "output.mp3",
    language: str = "pt-BR",
    voice: str = "antonio"
) -> str:
    """Convert text to speech and save audio file."""
    response = requests.post(
        "https://api.iteratools.com/v1/tts",
        headers={"Authorization": f"Bearer {API_KEY}"},
        json={
            "text": text,
            "language": language,
            "voice": voice,
            "format": "mp3",
            "return_url": True
        }
    )
    response.raise_for_status()
    data = response.json()

    # Download audio
    audio = requests.get(data["url"])
    Path(output_file).write_bytes(audio.content)

    print(f"Audio saved: {output_file}")
    print(f"Duration: {data['duration_seconds']:.1f}s")
    print(f"Credits used: {data['credits_used']}")
    return data["url"]

def batch_tts(texts: list[str], output_dir: str = ".") -> list[str]:
    """Convert multiple texts to speech."""
    urls = []
    for i, text in enumerate(texts):
        url = text_to_speech(
            text,
            output_file=f"{output_dir}/audio_{i+1:03d}.mp3"
        )
        urls.append(url)
    return urls

if __name__ == "__main__":
    # Single conversion
    text_to_speech(
        "Seu pagamento foi aprovado! Obrigado por comprar conosco.",
        "payment_confirmation.mp3"
    )

    # Batch conversion for IVR system
    ivr_messages = [
        "Bem-vindo. Pressione um para suporte técnico.",
        "Pressione dois para faturamento.",
        "Pressione três para falar com um atendente."
    ]
    batch_tts(ivr_messages, output_dir="ivr_audio")
Enter fullscreen mode Exit fullscreen mode

Portuguese-Specific Considerations

When choosing a TTS API for Portuguese, watch out for:

  1. BR vs PT accent: pt-BR (Brazilian) and pt-PT (European Portuguese) sound very different. Make sure the API supports your target variant.
  2. Abbreviations: APIs vary in how they handle "Dr.", "R$", "km/h" — test these before committing.
  3. SSML support: For fine-grained control over pauses, emphasis, and pronunciation, SSML support is important for professional IVR systems.

Conclusion

For developers building Portuguese-language voice features, the choice depends on your use case:

  • IteraTools: Best for budget-conscious projects that need Portuguese TTS as part of a broader API toolkit (also handles scraping, WhatsApp, PDF, etc.). Credit-based, no monthly fees.
  • ElevenLabs: Best for high-quality voice cloning or when voice naturalness is critical (e.g., content creation).
  • OpenAI TTS: Good quality, easy integration if you're already in the OpenAI ecosystem.

Get started at api.iteratools.com — no monthly commitment, pay-as-you-go credits.

Top comments (0)