OpenAI Compatibility
OpenAI text to speech
Generate speech with the official OpenAI JavaScript or Python SDK.
Set the OpenAI client's base URL to https://api.allmodels.io/oai and use your AllModels API key.
Generate an audio file
POST
https://api.allmodels.io/oai/audio/speechOpenAIimport { writeFile } from "node:fs/promises";
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.ALLMODELS_API_KEY,
baseURL: "https://api.allmodels.io/oai"
});
const audio = await client.audio.speech.create({
model: "elevenlabs/eleven-turbo-v2-5",
voice: "pNInz6obpgDQGcFmaJgB",
input: "Hello from AllModels",
response_format: "mp3"
});
await writeFile("speech.mp3", Buffer.from(await audio.arrayBuffer()));Streaming
Start playing or processing audio before the full response is ready.
import { createWriteStream } from "node:fs";
import { Readable } from "node:stream";
const response = await client.audio.speech.create({
model: "grok/grok-tts",
voice: "eve",
input: "This response starts playing before generation is complete.",
response_format: "pcm",
stream_format: "audio"
});
Readable.fromWeb(response.body).pipe(createWriteStream("speech.pcm"));Use stream_format: "audio" for audio bytes or stream_format: "sse" for OpenAI speech events. Support varies by model and provider.
Formats and controls
| Field | Description |
|---|---|
model | Model name or accepted alias. |
voice | Provider voice ID string or { "id": "..." } object. |
input | Text to synthesize. See the API reference for the maximum length. |
response_format | mp3, opus, aac, flac, wav, or pcm. |
speed | Speech rate where supported. |
instructions | Provider-specific voice or style instructions. |
stream_format | Raw audio bytes or sse events. |
provider | AllModels provider preferences. |
provider_options | Provider-specific controls. |
AllModels does not convert audio between formats. If the selected model cannot produce the requested format, the API returns invalid_response_format.
Select a provider
Use provider preferences to choose or prioritize providers:
await client.audio.speech.create({
model: "elevenlabs/eleven-turbo-v2-5",
voice: "pNInz6obpgDQGcFmaJgB",
input: "Route this through Fal.",
response_format: "mp3",
provider: { only: ["fal"], allow_fallbacks: false },
provider_options: { speed: 1.1 }
});See Providers for all provider options.
Handle errors
The OpenAI SDK raises an API status error when a request fails. Check the error code and status before retrying:
import OpenAI from "openai";
try {
await client.audio.speech.create({
model: "elevenlabs/eleven-turbo-v2-5",
voice: "pNInz6obpgDQGcFmaJgB",
input: "Hello from AllModels",
response_format: "mp3"
});
} catch (error) {
if (error instanceof OpenAI.APIError) {
console.error(error.status, error.error);
if (error.status === 429 || error.status >= 500) {
console.error("Retry with bounded exponential backoff");
}
} else {
throw error;
}
}