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

# Create Speech Task

`POST /v1/tts/sirius`

Create a Text-to-Speech task with Sirius. Provide **exactly one** of `voice` (preset, from `GET /v1/tts/sirius/voices`), `voice_asset_id` (your voice clone) or `voice_design_id` (your saved voice design). Preset voices additionally accept free-text `style` instructions. Cost: `⌈characters / 2⌉` credits, refunded automatically on failure.

### Example
```bash
curl -X POST https://genaipro.io/api/v1/tts/sirius \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"content": "Xin chào, đây là GenAIPro", "voice": "arcturus", "style": "speak softly, warm tone"}'
```
> **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
  - `voice` string — Preset voice id (from `GET /v1/tts/sirius/voices`). Provide exactly one of `voice` / `voice_asset_id` / `voice_design_id`.
  - `voice_asset_id` string — Voice clone id (from `POST /v1/tts/voice-assets`).
  - `voice_design_id` string — Saved voice design id (from `POST /v1/tts/sirius/voice-designs/{id}/save`).
  - `style` string — Optional plain-text delivery instructions (e.g. `speak softly, sad tone`). Preset voices only — rejected with `400` when combined with a personal voice.
  - `callback_url` string — Optional webhook — receives the task object when the task completes or fails

## Response `201`

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, style, credit, callback)
- `429` — Rate limit exceeded

---

[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)
