# Create speech (OpenAI-compatible) (https://voicelabs.now/docs/api-reference/generation/createOpenAiSpeech)

The OpenAI `POST /v1/audio/speech` contract, served by VoiceLabs. Point any OpenAI SDK at `https://app.voicelabs.now/v1` as its base URL and pass a VoiceLabs API key as the API key — no other change is needed. Unlike `POST /v1/speech` this endpoint is SYNCHRONOUS: it holds the response open until the audio is ready and returns the bytes, because that is the contract an OpenAI client is written against. Every parameter VoiceLabs cannot honour is refused with a 400 naming it rather than accepted and ignored. Two parameters OpenAI does not define are accepted as VoiceLabs extensions and forwarded: `seed`, which makes a take reproducible, and `temperature`, which only the `chatterbox` and `chatterbox_turbo` engines honour — every other engine refuses it with `400` rather than discarding it. An OpenAI SDK reaches them through its own escape hatch for non-OpenAI parameters (`extra_body` in the Python client). Errors on this endpoint use OpenAI's `{"error": {...}}` envelope instead of the RFC 9457 problem document the rest of /v1 returns, so an OpenAI SDK raises a typed exception with a readable message; the `code` member still carries this API's own stable error token.

Requires the `voice:generate` scope.

Full machine-readable contract: https://app.voicelabs.now/openapi.json