Spanish text to speech
A generic multilingual voice model reading Spanish often carries traces of English cadence in its stress and vowel sounds, which native Spanish-speaking listeners notice immediately even if they can't name what's off. This Spanish text to speech API is built around native Spanish voices instead, so the output sounds like it belongs to the language rather than being translated into it.
Run it online
Run this on our servers with your account. Free tools run in your browser; this one bills your KIT balance per the price above.
Why 'multilingual' isn't the same as 'native'
Spanish is not one accent — Mexican, Rioplatense, Caribbean and Castilian Spanish each carry distinct rhythm, consonant softening and vowel clarity, and a voice model trained primarily on other languages tends to flatten those distinctions into something that technically pronounces the words but doesn't sound like anyone's actual Spanish. This endpoint is built specifically around Spanish voice data rather than treating Spanish as one more language a general model happens to also support, which is the difference listeners actually hear.
How the request works
You send plain Spanish text in the request body and the task queues asynchronously, returning a task_id right away. Because natural speech generation takes real processing time for anything beyond a few words, the finished audio arrives afterward through a signed webhook — the recommended path for automated pipelines — or a signed link valid for 24 hours if you're checking manually. The endpoint reads Spanish text directly; no language flag or locale negotiation is required beyond sending Spanish content.
Who this serves specifically
Media companies producing Spanish-language audio for Latin American or Spanish audiences, customer service systems that need an IVR greeting that sounds native rather than dubbed, and e-learning platforms teaching in Spanish all need audio their listeners won't mentally flag as foreign. That last point matters more than it sounds: a voice with the wrong cadence pulls attention away from the content itself, which defeats the point of narrating it in the first place.
Numbers, currency and everyday text
Spanish text carries its own conventions worth getting right — decimal commas instead of decimal points in many countries, currency read in the local way, dates ordered day-month-year — and native Spanish voice models handle these conventions the way a Spanish-speaking narrator would, rather than reading them literally as if translated from an English template. That attention to convention is exactly what separates audio that sounds produced in Spanish from audio that sounds converted into it.
Pricing, access and data handling
Pricing is a small per-request base fee plus a per-1000-character rate on the Spanish input text, with failed tasks — after automatic retries — never billed. Like every endpoint in the API, it requires prepaid balance; a request without one returns HTTP 402 rather than a degraded free response. Generated audio and the source text are deleted once the retention window ends and are never used to train any model.
What you can do with it
Spanish-language podcast production
Generate a spoken track from a Spanish script for a podcast episode without hiring a voice talent for every update.
Native IVR greetings
Produce phone system prompts in Spanish that sound like a native speaker recorded them, not a translated English voice.
E-learning narration in Spanish
Narrate lesson text for Spanish-speaking learners so pronunciation and cadence match what a native instructor would sound like.
Regional news and article read-alouds
Offer a Spanish audio version of published articles for Latin American readers who prefer listening over reading.
FAQ
How is the Spanish text to speech API different from the general TTS endpoint?
It's built around native Spanish voices rather than a multilingual model that also happens to support Spanish, which produces more natural cadence and pronunciation for Spanish listeners.
Does it support Latin American and Castilian Spanish?
It generates native-sounding Spanish speech; check available voice options in your account for specific regional variants.
Is the Spanish text to speech API free?
There's no free tier — free tiers get abused and slow everyone down. Access runs on a prepaid ForHosting KIT balance: top up from $10.00 (it never expires) and each request is charged at its published price, so a call with no balance returns HTTP 402. No subscription, no tokens, no invented credits, and a failed task is never charged.
How much does it cost to convert Spanish text to speech?
It costs $0.002 per request plus $0.0025 per 1000 characters of Spanish input text.
Can I use this for numbers, dates and currency in Spanish?
Yes, the native Spanish voice models read numbers, dates and currency using Spanish-language conventions rather than a literal translation of an English format.
How do I receive the generated audio?
The task runs asynchronously and returns a task_id immediately; the audio is delivered via a signed webhook or a signed link valid for 24 hours.
Can I use SSML markup with the Spanish voice endpoint?
This endpoint accepts plain Spanish text; for explicit control over pauses and emphasis in Spanish, use the SSML text to speech endpoint with Spanish-tagged text.
What happens if a Spanish TTS task fails?
It is automatically retried up to three times at no charge; if it still fails you receive a clear error instead of being billed.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, and soon from our app, email and Telegram.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/voice/tts-es \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"…"}'const res = await fetch("https://api.kit.forhosting.com/voice/tts-es", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "…"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/voice/tts-es",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "…"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/voice/tts-es", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"…"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"…"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/voice/tts-es", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "…"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "voice.tts_es",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_mb | 200 |
max_minutes | 180 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |