Voice
Text-to-speech, dialogue, voice changing, dubbing, transcription, and cloning. Packs top up the key you already use.
On this page · 8 sections
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. 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: 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— 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.
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— 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.
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.
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$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