API Reference
The VoiceLabs /v1 REST API, operation by operation — generated from the published OpenAPI 3.1 document, with a request builder on every page.
Every operation of the VoiceLabs public API, generated from the same OpenAPI 3.1 document the server publishes at app.voicelabs.now/openapi.json — which is itself generated from the schemas the handlers validate with. Each page carries the parameters, the request and response schemas, the statuses it can return, and a builder that sends a real request.
New to the API? Start at the Developer API overview: base URL, x-api-key
authentication, scopes, rate limits, and idempotency apply to every operation below.
Generation
Creating audio and text. These operations require a key with the voice:generate scope.
- Create speech —
POST /v1/speech - Create a transcription —
POST /v1/transcriptions - Ensure the default voice —
POST /v1/voices/default
Voice cloning
Creating a cloned voice from a recording. Requires a key with the voice:clone scope — its own
scope, because it needs a recording of a real person.
- Clone a voice —
POST /v1/voices/clone
Voices and history
Reading what is on the account. These need only voice:read, and never draw on the plan
allowance.
- List voices —
GET /v1/voices - Get a generation —
GET /v1/generations/{generationId} - Download generated audio —
GET /v1/audio/{generationId} - List captures —
GET /v1/captures
Errors are documented per code
Every error is an RFC 9457 problem document whose type URI resolves to a page for that exact
code at app.voicelabs.now/errors.
Developer API
The VoiceLabs /v1 REST API — scoped API keys, text-to-speech and transcription, an OpenAI-compatible /v1/audio/speech, and the @voicelabs/sdk TypeScript SDK.
Create speech POST
Generate speech from text in one of this account's voice profiles. Returns immediately with a generation id and status "generating" — poll GET /v1/generations/{id} to retrieve the audio URL once it completes. Send an Idempotency-Key header to make a retried request safe: the same key with the same body replays the original response instead of generating a second time. `seed` and `temperature` pin the sampling: a seed makes a take reproducible, and a temperature is honoured only by the `chatterbox` and `chatterbox_turbo` engines — ask any other engine for one and the request is refused with `400 invalid_request` rather than generated at a setting that was quietly discarded. This endpoint does not choose the engine; the voice profile's own default engine serves the request. Requires the `voice:generate` scope.