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.