Developer API
A controlled asynchronous API sharing your web account, references, jobs and concurrency limits. New generation is unavailable while the model is offline; historical results remain accessible.
API keys are not enabled in this environment yet.
read: models and jobs; write: upload, crop, submit, cancel and resume; audio: access links and downloads. Upload WAV/MP3 up to 25 MiB and 0.5–120 seconds; references 0.5–15 seconds; each job up to 1,400 characters, 24 segments and 600 seconds of output. Up to 3 active keys per account, 60 API requests per minute shared across keys, and 1 active job. Web task admission limits also apply.
# Keep VR_API_KEY on your server. Never put it in a URL.
curl https://voicerouter.top/api/v1/models -H "Authorization: Bearer $VR_API_KEY"
# Upload WAV/MP3, max 25 MiB and 0.5–120 seconds. Authorized voices only.
curl https://voicerouter.top/api/v1/uploads -X POST -H "Authorization: Bearer $VR_API_KEY" \
-H "x-file-name: reference.wav" --data-binary @reference.wav
# POST /api/v1/references with {"originalId":"UPLOAD_UUID","startMs":0,"endMs":5000}
# Use the returned reference id below; clips must be 0.5–15 seconds.
# POST /api/v1/speech/jobs with a UUID Idempotency-Key and:
{"text":"Hello","referenceId":"YOUR_REFERENCE_UUID","model":"indextts-2.5",
"capabilityVersion":"2026-10-02.2","parameters":{"language":"en","speed":1}}
# Paths below are relative to /api/v1. GET /usage returns owner-only usage.
# GET /speech/jobs/{id} to poll. POST /speech/jobs/{id}/cancel to cancel.
# POST /speech/jobs/{id}/resume with a new Idempotency-Key and
# {"stateVersion": CURRENT_VERSION}. Completed segments are reused.
# POST /assets/{outputId}/access returns a relative URL, valid for 10 min.
# GET that URL on this origin, still with Authorization: Bearer $VR_API_KEY.Replaying the same idempotency key and input returns the same job; changed input returns IDEMPOTENCY_CONFLICT. Errors use {error:{code}}: 401 invalid identity; 403 missing scope; 404 missing/not owned; 409 state/idempotency conflict; 410 expired link; 422 invalid input; 429 rate limit (Retry-After); 503 offline model. File retention is separate; see storage. Revoking a key does not cancel accepted jobs.