Create a transcription
Transcribe a base64-encoded audio clip to text. Returns the transcript along with the id of the capture it created, which stays retrievable through GET /v1/captures. Send an Idempotency-Key header to make a retried request safe. Requires the `voice:generate` scope.
Transcribe a base64-encoded audio clip to text. Returns the transcript along with the id of the capture it created, which stays retrievable through GET /v1/captures. Send an Idempotency-Key header to make a retried request safe.
Requires the voice:generate scope.
A VoiceLabs API key, sent in the x-api-key header. Keys begin with vl_sandbox_. This is the simplest way to authenticate and is what most callers should use.
Create one in the developer console at https://voicelabs.now/connections, on the API keys tab, choosing the scopes it carries. A key does exactly what its scopes allow: one without voice:generate is answered 403 insufficient_scope on the generation operations and cannot spend the account's allowance. The secret is shown once, at creation; revoking a key takes effect on its very next request.
In: header
Header Parameters
An optional client-generated key that makes a retry safe. Replaying the same key with the same body returns the ORIGINAL response byte-for-byte instead of doing the work a second time; replaying it with a different body is refused with idempotency_key_reused.
length <= 255Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X POST "https://example.com/v1/transcriptions" \ -H "Content-Type: application/json" \ -d '{ "audio": "string" }'{ "id": "string", "text": "string", "language": "string", "duration_ms": 0}Create speech (OpenAI-compatible) POST
The OpenAI `POST /v1/audio/speech` contract, served by VoiceLabs. Point any OpenAI SDK at `https://app.voicelabs.now/v1` as its base URL and pass a VoiceLabs API key as the API key — no other change is needed. Unlike `POST /v1/speech` this endpoint is SYNCHRONOUS: it holds the response open until the audio is ready and returns the bytes, because that is the contract an OpenAI client is written against. Every parameter VoiceLabs cannot honour is refused with a 400 naming it rather than accepted and ignored. Two parameters OpenAI does not define are accepted as VoiceLabs extensions and forwarded: `seed`, which makes a take reproducible, and `temperature`, which only the `chatterbox` and `chatterbox_turbo` engines honour — every other engine refuses it with `400` rather than discarding it. An OpenAI SDK reaches them through its own escape hatch for non-OpenAI parameters (`extra_body` in the Python client). Errors on this endpoint use OpenAI's `{"error": {...}}` envelope instead of the RFC 9457 problem document the rest of /v1 returns, so an OpenAI SDK raises a typed exception with a readable message; the `code` member still carries this API's own stable error token. Requires the `voice:generate` scope.
Ensure the default voice POST
Make sure this account has VoiceLabs' default built-in voice ("Heart", the Kokoro preset `af_heart`), creating it only if it is missing, and return it. Safe to call on every start: a second call returns the same voice with `created: false` and creates nothing. Use it when GET /v1/voices comes back empty, then pass the returned id as `voice_id` (POST /v1/speech) or `voice` (POST /v1/audio/speech). It adds a built-in voice only; it never clones anyone's voice. Requires the `voice:generate` scope.