openapi: 3.0.3
info:
title: WellSaid Labs Clips Text-to-Speech API
description: The WellSaid Labs API renders text into studio-quality AI voiceover. It exposes streaming text-to-speech (audio returned as an HTTP stream for low time-to-first-byte playback), word-level timing and subtitle rendering, asynchronous clip creation and combination, a catalog of voice avatars, and pronunciation control via replacement libraries and respelling suggestions. All requests authenticate with an X-Api-Key header. WellSaid does not currently support end-user authentication and recommends making requests from an internal or trusted source. API access is gated behind a trial API key and a business plan. Endpoints, request fields, and response shapes here are modeled from the public documentation at docs.wellsaidlabs.com and are honestly approximated where the reference does not publish a full schema.
version: '1.0'
contact:
name: WellSaid Labs
url: https://wellsaidlabs.com
servers:
- url: https://api.wellsaidlabs.com/v1
description: WellSaid Labs API
security:
- apiKeyAuth: []
tags:
- name: Text-to-Speech
description: Render text to speech, with streaming audio and word timing.
paths:
/tts/stream:
post:
operationId: renderTtsStream
tags:
- Text-to-Speech
summary: Render text to speech (streaming)
description: Renders the supplied text with the chosen voice avatar and returns the result as a stream of an audio file (MP3), not the finished file, so the client can begin playback with a low time-to-first-byte. Default keys are limited to 1,000 characters per request. Accepts a subset of SSML tags.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TtsRequest'
responses:
'200':
description: A stream of the rendered audio.
content:
audio/mpeg:
schema:
type: string
format: binary
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
/word-timing:
post:
operationId: renderWordTiming
tags:
- Text-to-Speech
summary: Render text to speech with timing information
description: Renders text to speech and returns the audio together with word-level timing information and subtitles, so captions can be aligned to the generated voiceover.
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/TtsRequest'
responses:
'200':
description: Rendered audio with word timing and subtitle data.
content:
application/json:
schema:
$ref: '#/components/schemas/WordTimingResponse'
'401':
$ref: '#/components/responses/Unauthorized'
'429':
$ref: '#/components/responses/RateLimited'
components:
responses:
RateLimited:
description: Rate limit or monthly character quota exceeded. Inspect the x-rate-limit-* and x-quota-* response headers.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
Unauthorized:
description: Missing or invalid X-Api-Key.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
schemas:
Error:
type: object
properties:
message:
type: string
code:
type: string
WordTimingResponse:
type: object
properties:
audio_url:
type: string
description: URL to the rendered audio.
subtitles:
type: string
description: Subtitle text aligned to the audio.
words:
type: array
description: Per-word timing entries.
items:
type: object
properties:
word:
type: string
start:
type: number
format: float
description: Start time in seconds.
end:
type: number
format: float
description: End time in seconds.
TtsRequest:
type: object
properties:
text:
type: string
description: The text to convert to speech. Default keys allow up to 1,000 characters per request.
speaker_id:
type: string
description: The voice avatar (speaker) id to render with, for example "3".
model:
type: string
description: The voice model to use, for example "caruso" or "legacy".
required:
- text
- speaker_id
securitySchemes:
apiKeyAuth:
type: apiKey
in: header
name: X-Api-Key
description: API key issued by WellSaid Labs, passed in the X-Api-Key header. Request a trial key from the console; production use requires a business plan.