---
title: "Vapi Synthesize"
method: POST
path: "/vapi/synthesize"
---

# Vapi Synthesize

`POST /vapi/synthesize`

Vapi custom TTS webhook.

With ``message.call.id``: clause POSTs of one agent turn share a
TTS session (KV continuation). Without it (test harness, non-Vapi
callers): a stateless one-shot synthesis.

## Query parameters

- `voice_id` string, nullable
- `model_id` string, nullable

## Headers

- `x-voice-id` string, nullable

## Request body

- VapiTTSRequest — Vapi custom TTS webhook request body.
  - `message` VapiMessage, required — The ``message`` object Vapi sends in every custom TTS webhook.
    - `type` string
    - `text` string, required
    - `sampleRate` integer, required — Target sample rate in Hz
    - `call` VapiCall — Subset of Vapi's ``call`` object — only the stable id.
      - `id` string, required
      - `orgId` string, nullable
    - `artifact` VapiArtifact — Subset of Vapi's ``artifact`` — only the transcript length. ``len(messages)`` is the turn id: stable across POSTs of one agent turn, grows between turns. Items are never introspected.
      - `messages` unknown[]
        - unknown

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.net/kugelaudio/apis/kugelaudio-tts-api.md) · [All operations](https://skmtc.net/kugelaudio/apis/kugelaudio-tts-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/kugelaudio/kugelaudio-tts-api/revisions/695a69509860/schema)
