# Voice

> Text-to-speech, dialogue, voice changing, dubbing, transcription, and cloning. Packs top up the key you already use.

Voice is the ScaleMax workspace and API for spoken audio. It covers text-to-speech, multi-speaker dialogue, a speech-to-speech voice changer, AI dubbing, speech-to-text, and voice cloning. Generation runs on three engines customers can pick: ElevenLabs, MiniMax, and CapCut.

## Where it lives

Open the dashboard workspace at [https://dashboard.scalemax.pro/voice](https://dashboard.scalemax.pro/voice). The same work is available on the public API at `https://api.scalemax.pro/v1`.

## Who can use it

Voice spends only Voice credits. Every API key starts with 1,000 free Voice credits. Packs of 100K ($6) and 1M ($50) top up the key — real money, bought in Voice → Credits. API-credit dollar balances are not used for Voice. There is no dollar fallback. Auto-only keys are refused. Legacy keys with `provider_scope='voice'` still work.

Do not infer the URL from the key name. Match the billing surface as on [Authentication](https://docs.scalemax.pro/docs/authentication): a credit key uses `https://api.scalemax.pro/v1`; a token key uses `https://api.scalemax.pro/token/v1`. Native Voice paths stay `/voice/…` under that base. OpenAI-compatible speech and transcription sit at `/audio/speech` and `/audio/transcriptions` on the same base.

## Voice credits packs

A Voice pack tops up `voice_units_budget` on the key you already use. It does not mint a new key. Every key starts with 1,000 free Voice credits. Units are the same unit `estimateVoiceCredits` produces. One unit is one Voice credit on standard voices.

- **100K Voice credits** — $6 (100,000 credits — about 200,000 characters on Flash, 100,000 on v3)
- **1M Voice credits** — $50 (1,000,000 credits — about 2,000,000 characters on Flash, 1,000,000 on v3)

Buy packs inside Voice → Credits at [https://dashboard.scalemax.pro/voice/credits](https://dashboard.scalemax.pro/voice/credits)— not on the public pricing page. Indian customers see ₹600 and ₹5,000 at the fixed checkout rate of $1 = ₹100.

## Pricing

Billing unit is one Voice credit. Character work multiplies characters by the model rate below. Audio work bills by duration. Exporting a transcript adds `+15%` to the character estimate. A job the remaining credits cannot cover is refused — buy a pack rather than falling back to API-credit dollars.

| Family | Credits |
| --- | --- |
| ElevenLabs v3 / Multilingual v2 | `1 / character` |
| ElevenLabs Flash / Turbo | `0.5 / character` |
| MiniMax HD | `1 / character` |
| MiniMax Turbo | `0.6 / character` |
| CapCut | `1 / character` |
| Voice changer (temporarily unavailable) | `1,000 / minute` |
| Dubbing | `3,000 / minute` |
| Speech-to-text | ~`21 / minute` |
| Voice clone | `1,000` flat |

Pack rate is per Voice credit, not per character: $0.06 / 1k credits on the 100K pack, $0.05 / 1k on the 1M pack. Flash and Turbo use 0.5 credits per character (~2× the characters of v3 / multilingual at 1 credit per character).

Full field reference: [Voice API](https://docs.scalemax.pro/docs/voice/api).

## Speech to Text

Speech to Text turns a recording or an audio file into searchable text. Open it at [https://dashboard.scalemax.pro/voice/transcribe](https://dashboard.scalemax.pro/voice/transcribe)— upload a file or record in the browser.

Files can be up to 90 MB and 90 minutes. Accepted formats: MP3, WAV, M4A, AAC, OGG, Opus, FLAC, WebM, AIFF. Optional extras: speaker labels, word timestamps, sound tags such as (laughter), and filler-word removal. Export TXT, Markdown, SRT, VTT, or JSON.

Cost is `ceil(duration_seconds × 0.35)` Voice credits — 0.35 credits per second, rounded up, which is 21 credits per minute.

## Quickstart — OpenAI SDK

`POST /v1/audio/speech` is a synchronous wrap of native TTS: ScaleMax submits, polls, and returns `audio/mpeg`. Point the official OpenAI SDK at `https://api.scalemax.pro/v1`.

speech.py:

```python
from openai import OpenAI

client = OpenAI(
    api_key="YOUR_SCALEMAX_KEY",
    base_url="https://api.scalemax.pro/v1",
)

speech = client.audio.speech.create(
    model="eleven_multilingual_v2",
    voice="<voice_id>",
    input="Hello",
    extra_body={"language": "en"},
)
speech.write_to_file("hello.mp3")
```

## Quickstart — native TTS, poll, download

Native routes return `202` with a task object. Poll `GET /v1/voice/tasks/{id}` until `completed` or `failed`, then fetch the file. Auth is required on every call, including the download.

**macOS / Linux**

tts-poll-download.sh:

```bash
export SCALEMAX_API_KEY="YOUR_SCALEMAX_KEY"
export SCALEMAX_BASE="https://api.scalemax.pro/v1"

TASK=$(curl -sS -X POST "$SCALEMAX_BASE/voice/tts" \
  -H "Authorization: Bearer $SCALEMAX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "eleven_multilingual_v2",
    "voice": "<voice_id>",
    "text": "Hello",
    "language": "en"
  }')
ID=$(printf '%s' "$TASK" | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])")

while true; do
  BODY=$(curl -sS "$SCALEMAX_BASE/voice/tasks/$ID" \
    -H "Authorization: Bearer $SCALEMAX_API_KEY")
  STATUS=$(printf '%s' "$BODY" | python3 -c "import json,sys; print(json.load(sys.stdin)['status'])")
  case "$STATUS" in
    completed|failed|cancelled) break ;;
  esac
  sleep 1
done

curl -sS "$SCALEMAX_BASE/voice/files/$ID/audio" \
  -H "Authorization: Bearer $SCALEMAX_API_KEY" \
  -o hello.mp3
```

**Windows PowerShell**

tts-poll-download.ps1:

```powershell
$env:SCALEMAX_API_KEY = "YOUR_SCALEMAX_KEY"
$base = "https://api.scalemax.pro/v1"
$headers = @{ Authorization = "Bearer $env:SCALEMAX_API_KEY" }

$body = @'
{
  "model": "eleven_multilingual_v2",
  "voice": "<voice_id>",
  "text": "Hello",
  "language": "en"
}
'@
$task = Invoke-RestMethod -Method Post -Uri "$base/voice/tts" -Headers $headers -ContentType "application/json" -Body $body

do {
  Start-Sleep -Seconds 1
  $status = (Invoke-RestMethod -Uri "$base/voice/tasks/$($task.id)" -Headers $headers).status
} while ($status -notin @('completed', 'failed', 'cancelled'))

Invoke-WebRequest -Uri "$base/voice/files/$($task.id)/audio" -Headers $headers -OutFile hello.mp3 -UseBasicParsing
```

## Next steps

- [Voice API reference](https://docs.scalemax.pro/docs/voice/api)
- [Voice credits on the dashboard](https://dashboard.scalemax.pro/voice/credits)
- [Authentication and key type](https://docs.scalemax.pro/docs/authentication)
