---
title: "Create speech"
method: POST
path: "/audio/speech"
tags: ["Audio"]
---

# Create speech

`POST /audio/speech`

Generates audio from the input text.

Returns the audio file content, or a stream of audio events.

## Request body

- CreateSpeechRequest
  - `model` union, required — One of the available [TTS models](https://developers.openai.com/api/docs/guides/text-to-speech): `tts-1`, `tts-1-hd`, `gpt-4o-mini-tts`, or `gpt-4o-mini-tts-2025-12-15`.
    - string
    - 'tts-1' | 'tts-1-hd' | 'gpt-4o-mini-tts' | 'gpt-4o-mini-tts-2025-12-15'
  - `input` string, required — The text to generate audio for. The maximum length is 4096 characters.
  - `instructions` string — Control the voice of your generated audio with additional instructions. Does not work with `tts-1` or `tts-1-hd`.
  - `voice` union, required — The voice to use when generating the audio. Supported built-in voices are `alloy`, `ash`, `ballad`, `coral`, `echo`, `fable`, `onyx`, `nova`, `sage`, `shimmer`, `verse`, `marin`, and `cedar`. You may also provide a custom voice object with an `id`, for example `{ "id": "voice_1234" }`. Previews of the voices are available in the [Text to speech guide](https://developers.openai.com/api/docs/guides/text-to-speech#voice-options).
    - union
      - string
      - 'alloy' | 'ash' | 'ballad' | 'coral' | 'echo' | 'sage' | 'shimmer' | 'verse' | 'marin' | 'cedar'
    - 'fable' | 'onyx' | 'nova'
    - object — Custom voice reference.
      - `id` string, required — The custom voice ID, e.g. `voice_1234`.
  - `response_format` 'mp3' | 'opus' | 'aac' | 'flac' | 'wav' | 'pcm' — The format to audio in. Supported formats are `mp3`, `opus`, `aac`, `flac`, `wav`, and `pcm`.
  - `speed` number — The speed of the generated audio. Select a value from `0.25` to `4.0`. `1.0` is the default.
  - `stream_format` 'sse' | 'audio' — The format to stream the audio in. Supported formats are `sse` and `audio`. `sse` is not supported for `tts-1` or `tts-1-hd`.

## Response `200`

OK

## Other responses

- `400` — Invalid speech request, input, output format, or voice.
- `401` — Authentication failed because the API key is missing or revoked, or the client IP is not authorized.
- `403` — Access to a personal API organization is blocked by the organization policy.
- `429` — The request was rejected because a rate limit was exceeded. A slow_down error means traffic increased too quickly; reduce your request rate, then increase it gradually.
- `500` — The voice or speech audio could not be processed.
- `503` — The service is temporarily unavailable. A server_is_overloaded error means the requested model is temporarily overloaded; retry after a brief delay.

## Changes

- **2026-09-25** `d86203de41ae` — 4 info
  - added the non-success response with the status `400`
  - added the non-success response with the status `401`
  - added the non-success response with the status `403`
  - added the non-success response with the status `500`
- **2026-09-24** `43d3ab828715` — 1 breaking, 1 info
  - removed `#/components/schemas/VoiceIdsShared` from the `voice` request property `anyOf` list
  - added `subschema #1` to the `voice` request property `anyOf` list
- **2026-09-03** `9430b00d75b4` — 2 info
  - added the optional property `error/misalignment` to the response with the `429` status
  - added the optional property `error/misalignment` to the response with the `503` status
- **2026-09-03** `5f6acbcbb919` — 1 info
  - added the non-success response with the status `503`
- **2026-08-14** `6ac2618eefd7` — 1 info
  - added the non-success response with the status `429`

[Full history](https://skmtc.dev/openai/apis/openapi/changes/audio/speech/post.md)

---

[API](https://skmtc.dev/openai/apis/openapi.md) · [All operations](https://skmtc.dev/openai/apis/openapi/llms.txt) · [OpenAPI document](https://skmtc.dev/openai/apis/openapi/revisions/222f167a2327?raw)
