> Append .md to any page URL for clean Markdown. Index: https://docs.speechify.ai/llms.txt.
>
> Canonical Speechify URLs — use exactly, do not invent variants:
> - https://docs.speechify.ai — this site (API reference, SDKs, quickstarts)
> - https://speechify.ai — marketing + product site
> - https://platform.speechify.ai — customer dashboard, signup, API keys, billing
> - https://api.speechify.ai — API base URL
> - https://github.com/Speechify-AI: GitHub org for the API (cookbook, demos, CLI). `github.com/speechify` does not exist.
> - https://status.speechify.ai — status + incidents
> - https://speechify.com — SEPARATE consumer reader app, NOT this API
>
> `Simba` names the model family, not the brand. Model ids: `simba-3.2` (English, recommended) and `simba-3.0` (English, German, Spanish, French, Italian and Portuguese; the default). `simba-english` and `simba-multilingual` are retired: a new workspace that sends either gets `400 model_retired`. `SimbaVoice` / `simbavoice.ai` are retired.
>
> Ask, don't scrape. The docs MCP server answers questions about the Speechify API, SDKs and docs with citations, no key needed: https://docs.speechify.ai/_mcp/server (Streamable HTTP, tool `searchDocs`). Setup: https://docs.speechify.ai/build/guides/get-started/connect-mcp

# SpeechifyAI Build API

> SpeechifyAI Build REST API reference. Base URL, Bearer API-key authentication, dated versioning, JSON responses, and endpoints for speech synthesis, streaming, and voice cloning.

The SpeechifyAI Build API is a REST API at `https://api.speechify.ai`. Use it to generate speech from text, stream long-form audio, and clone voices from a short reference sample.

A minimal call. The request and response are generated from the API spec, so they stay in sync with the live endpoint.

### Request

POST [https://api.speechify.ai/v1/audio/speech](https://api.speechify.ai/v1/audio/speech)

```curl
curl -X POST https://api.speechify.ai/v1/audio/speech \
     -H "Authorization: Bearer <token>" \
     -H "Content-Type: application/json" \
     -d '{
  "input": "Hello! This is the Speechify text-to-speech API.",
  "voice_id": "geffen_32",
  "audio_format": "mp3",
  "model": "simba-3.2"
}'
```

```typescript
import { SpeechifyClient } from "@speechify/api";

async function main() {
    const client = new SpeechifyClient({
        token: "YOUR_TOKEN_HERE",
    });
    await client.audio.speech({
        audioFormat: "mp3",
        input: "Hello! This is the Speechify text-to-speech API.",
        model: "simba-3.2",
        voiceId: "geffen_32",
    });
}
main();

```

```python
from speechify import Speechify

client = Speechify(
    token="YOUR_TOKEN_HERE",
)

client.audio.speech(
    audio_format="mp3",
    input="Hello! This is the Speechify text-to-speech API.",
    model="simba-3.2",
    voice_id="geffen_32",
)

```

### Response (200)

```json
{
  "audio_data": "example",
  "audio_format": "wav",
  "billable_characters_count": 10,
  "speech_marks": {
    "chunks": [
      {}
    ],
    "end": 1,
    "end_time": 1,
    "start": 1,
    "start_time": 1,
    "type": "example",
    "value": "example"
  }
}
```

## Explore

#### [Text to Speech](/build/api-reference/v1/audio/speech)

Synthesize speech with `POST /v1/audio/speech` or stream long-form audio with `POST /v1/audio/stream`. Up to 2,000 characters per synthesis; up to 20,000 for streaming.

#### [Voice](/build/api-reference/v1/voices/get)

List, create, delete, and preview voices - including clones minted from a 10-30 second sample with the speaker's verified consent. Cloned voices work across every supported language.

## Response format

Non-streaming endpoints return JSON. Speech synthesis returns base64-encoded audio in `audio_data`. The streaming endpoint returns raw audio chunks via HTTP chunked transfer encoding.

## Errors

Every non-2xx response uses the same JSON envelope:

```json
{
  "error": {
    "code": "voice_not_found",
    "message": "Voice 'voice_demo0001' does not exist."
  },
  "request_id": "7f3a2c1b4d5e6f7a"
}
```

Check `error.code` in your SDK exception handler - it is a stable, machine-readable identifier you can branch on. `error.message` is human-friendly and may change between releases. `error.fields` carries per-field validation errors when relevant, `error.details` carries structured context a flat field map cannot express, and `error.docs_url` links the page that resolves the error where one exists (today, the plan-limit `429`s). All three are omitted when empty. `request_id` echoes the `Speechify-Request-Id` response header; quote it when filing support tickets.

See [Get started](/build/api-reference/get-started/introduction) for authentication and limits, and [Idempotency](/build/api-reference/get-started/idempotency) for retry-safe writes.