---
title: "Generate speech from text (25 tokens per 1,000 characters)"
method: POST
path: "/v1/generate/speech"
---

# Generate speech from text (25 tokens per 1,000 characters)

`POST /v1/generate/speech`

## Request

- Base URL: `https://api.ffmpeg-micro.com`
- URL: `https://api.ffmpeg-micro.com/v1/generate/speech`
- Auth: HTTP bearer

Narration-quality text to speech (ElevenLabs multilingual, 29 languages; the same voice reads every language, so a re-voice keeps the narrator). Billed per character of `text`, pro rata, spent before the call and refunded on provider failure. Rate limited to 30/min.

## Request body

- GenerateSpeechRequest
  - `text` string, required
  - `voice` string: Provider voice name; omit for the default narrator

## Response `200`

Speech generated

- GenerateSpeechResponse
  - `url` string, uri: mp3
  - `characters` integer
  - `tokens_charged` number

## Other responses

- `400`: Invalid input (charged nothing)
- `401`: Missing/invalid API key
- `402`: Not enough tokens for this call; nothing was charged (for `animate`, `id` and `cancelled` are present if a render had already been submitted)
- `429`: Per-API-key rate limit exceeded (free routes 60/min, paid routes 30/min); see `x-ratelimit-*` headers
- `502`: The provider failed; any tokens spent were refunded unless `refund` says otherwise

---

[API](https://skmtc.dev/ffmpeg-micro/apis/ffmpeg-micro-api.md) · [All operations](https://skmtc.dev/ffmpeg-micro/apis/ffmpeg-micro-api/llms.txt) · [OpenAPI document](https://skmtc.dev/ffmpeg-micro/apis/ffmpeg-micro-api/revisions/64bb930ff345?raw)
