---
title: "Text-to-Speech"
method: POST
path: "/v1/speech/synthesize"
tags: ["Suprsonic"]
---

# Text-to-Speech

`POST /v1/speech/synthesize`

## Request

- Base URL: `https://suprsonic.ai`
- URL: `https://suprsonic.ai/v1/speech/synthesize`
- Auth: HTTP bearer
- TypeScript: <https://skmtc.dev/suprsonic/apis/suprsonic-unified-agent-api/docs/v1/speech/synthesize/post.ts> (a function with typed inputs; its response is checked against the schema)

Convert text to speech audio. Returns the speech as base64 MP3 audio with its sample rate and bit rate (read from the audio itself) and the voice used. Use for spoken voice or narration, up to 2,000 characters a call. For sound effects or music use sound-generate. Cost: 2 credits, charged only when a call succeeds.

## Request body

- SynthesizeRequest
  - `text` string, required
  - `voice_model` string, nullable
  - `voice_id` string, nullable
  - `provider` string, nullable
  - `stability` number
  - `similarity_boost` number

## Response `200`

The call's envelope: success, data (the capability's result), metadata, and credits_used (0 when the call did not succeed).

- UnifiedResponse: Standard envelope for all unified API responses.
  - `success` boolean, required
  - `data` union
    - object
    - unknown[]
      - unknown
  - `error` UnifiedError: RFC 7807 problem detail for machine-actionable errors.
    - `type` string, required
    - `title` string, required
    - `status` integer, required
    - `detail` string, nullable
    - `is_retriable` boolean
    - `retry_after_seconds` integer, nullable
    - `alternative_action` string, nullable
    - `error_category` string
    - `caller_error` string, nullable
  - `metadata` UnifiedMetadata: Metadata included in every unified API response.
    - `provider_used` string, nullable
    - `providers_tried` string[]
    - `mode_used` string, nullable
    - `response_time_ms` integer
    - `request_id` string
    - `capability` string, nullable
    - `params` object, nullable
  - `credits_used` integer

## Other responses

- `401`: No API key, or one that was not found or is revoked.
- `402`: Not enough credits for this call. The error's alternative_action says where to add them.
- `403`: The account is restricted by a billing issue.
- `422`: Validation Error
- `429`: The key's rate limit is reached. The error's retry_after_seconds says when to try again.

## Changes

- **2026-11-01** `120f2dd4c855`: 7 info
  - added the optional property `detail/caller_error` to the response with the `401` status
  - added the optional property `detail/caller_error` to the response with the `402` status
  - added the optional property `detail/caller_error` to the response with the `403` status
  - added the optional property `detail/caller_error` to the response with the `429` status
  - …3 more
- **2026-10-23** `9edc3bfe1b9c`: 2 info
  - added the optional property `detail/items/ctx` to the response with the `422` status
  - added the optional property `detail/items/input` to the response with the `422` status
- **2026-10-19** `8134f9a5b206`: 2 breaking, 15 info
  - the response's body type changed from no type to `object` for status `200`
  - the `detail/items/` response's property type changed from no type to `object` for status `422`
  - api operation id `unified_tts_v1_speech_synthesize_post` removed and replaced with `tts`
  - api tag `Suprsonic` added
  - …13 more
- **2026-10-05** `82b84752842e`: 1 info
  - the `provider` request property default value `auto` was added

[Operation history](https://skmtc.dev/suprsonic/apis/suprsonic-unified-agent-api/changes/v1/speech/synthesize/post.md)

---

[API](https://skmtc.dev/suprsonic/apis/suprsonic-unified-agent-api.md) - [All operations](https://skmtc.dev/suprsonic/apis/suprsonic-unified-agent-api/llms.txt) - [OpenAPI document](https://skmtc.dev/suprsonic/apis/suprsonic-unified-agent-api/revisions/120f2dd4c855?raw)
