---
title: "Create Speech Task"
method: POST
path: "/v1/tts/nova"
tags: ["Voice AI Beta — Nova"]
---

# Create Speech Task

`POST /v1/tts/nova`

Create a Text-to-Speech task with Nova. Provide **exactly one** of `model_id` (preset voice from `GET /v1/tts/nova/voices`) or `voice_asset_id` (your voice clone). Cost: `⌈characters × 0.7⌉` credits, deducted on creation and refunded automatically on failure.

### Example
```bash
curl -X POST https://genaipro.io/api/v1/tts/nova \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "Xin chào, đây là GenAIPro", "model_id": "e3cd384158934cc9a01029cd7d278634"}'
```
> **Rate limit:** 30 requests/minute

## Request body

- object
  - `title` string — Optional title (derived from content when empty)
  - `content` string, required — Text to convert to speech (no fixed length limit — bounded by your credit balance)
  - `model_id` string — Preset voice id (`_id` from `GET /v1/tts/nova/voices`). Provide exactly one of `model_id` / `voice_asset_id`.
  - `voice_asset_id` string — Voice clone id (from `POST /v1/tts/voice-assets`). Provide exactly one of `model_id` / `voice_asset_id`.
  - `normalize` boolean — Normalize text before synthesis
  - `callback_url` string — Optional webhook — receives the task object when the task completes or fails

## Response `200`

Task created — credits already deducted (`cost`)

- TtsTaskCreatedWithCost — Create-task acknowledgement
  - `id` string — Task ID (poll via the provider's `GET /{id}`)
  - `status` 'pending' | 'cloning' | 'queued' | 'processing' | 'merging' | 'process_merging' | 'completed' | 'failed' — Voice AI Beta task lifecycle: `pending` → `cloning` (clone flow only) → `queued` → `processing` → `merging` → `process_merging` → `completed` | `failed`.
  - `provider` string
  - `total_length` integer — Billable characters (encoder units ≈ UTF-8 bytes)
  - `cost` integer — Credits deducted for this task

## Other responses

- `400` — Invalid request (voice selection, credit, callback)
- `429` — Rate limit exceeded
- `503` — Voice verification temporarily unavailable — retry

---

[API](https://skmtc.dev/genaipro/apis/genaipro-api.md) · [All operations](https://skmtc.dev/genaipro/apis/genaipro-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/genaipro/genaipro-api/revisions/91f814eaecbd/schema)
