{"openapi":"3.1.0","info":{"title":"Lazybird Speech API","version":"1.0.0","description":"List voices, generate MP3 speech from text or SSML, and create, edit and publish cloned voices. Usage draws from the same monthly credits as Lazybird Studio (one credit per character).","contact":{"name":"Lazybird","url":"https://www.lazybird.app"}},"externalDocs":{"description":"API Reference","url":"https://www.lazybird.app/docs/api-reference"},"servers":[{"url":"https://api.lazybird.app/v1"}],"security":[{"apiKeyHeader":[]},{"apiKeyQuery":[]}],"paths":{"/status":{"get":{"operationId":"getStatus","summary":"Check service status","security":[],"responses":{"200":{"description":"Service is up","content":{"application/json":{"schema":{"type":"object","properties":{"status":{"type":"string","examples":["ok"]}}}}}}}}},"/auth/request-code":{"post":{"operationId":"requestLoginCode","summary":"Email a login code","description":"Sign up or log in without the studio: emails a 6-digit code that `/auth/verify-code` trades for an API key. Creates a free account on verify if none exists for the email. The response is the same whether or not an account exists. Disposable email domains are rejected. One code per email per minute, five per hour.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}}}}},"responses":{"202":{"description":"Code sent","content":{"application/json":{"schema":{"type":"object","properties":{"sent":{"type":"boolean"},"expiresInSeconds":{"type":"integer","examples":[600]}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}},"503":{"description":"Email login is temporarily unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/auth/verify-code":{"post":{"operationId":"verifyLoginCode","summary":"Trade a login code for an API key","description":"Returns a new API key for the account. Codes expire after 10 minutes and work once; five wrong attempts cancel the code. Each successful verification creates a new key; existing keys keep working.","security":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["email","code"],"properties":{"email":{"type":"string","format":"email"},"code":{"type":"string","description":"The 6-digit code from the email"},"keyName":{"type":"string","maxLength":100,"description":"A label for the new key"}}}}}},"responses":{"200":{"description":"API key created","content":{"application/json":{"schema":{"type":"object","properties":{"apiKey":{"type":"string"},"userId":{"type":"string"},"email":{"type":"string"},"isNewAccount":{"type":"boolean"}}}}}},"400":{"description":"Invalid or expired code","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}},"headers":{"Retry-After":{"schema":{"type":"integer"}}}}}}},"/me":{"get":{"operationId":"getAccount","summary":"Check your account","description":"Returns the account the API key belongs to, its plan and credit usage for the current period.","responses":{"200":{"description":"Account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Account"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/checkout":{"post":{"operationId":"createCheckout","summary":"Create a checkout link to upgrade","description":"Returns a checkout URL for a paid plan. Open it in a browser to pay; the plan applies as soon as payment completes and the same API key keeps working.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["plan","interval"],"properties":{"plan":{"type":"string","enum":["creator","pro","max"]},"interval":{"type":"string","enum":["monthly","yearly"]}}}}}},"responses":{"200":{"description":"Checkout link","content":{"application/json":{"schema":{"type":"object","properties":{"checkoutUrl":{"type":"string","format":"uri"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/voices":{"get":{"operationId":"listVoices","summary":"List voices","description":"Returns the public voice library. With `owner=me`, returns only the caller's own voices (cloned and published). Use a voice `id` as `voiceId` when generating speech.","parameters":[{"name":"owner","in":"query","required":false,"description":"Set to `me` to list only your own voices","schema":{"type":"string","enum":["me"]}}],"responses":{"200":{"description":"Voices","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Voice"}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"post":{"operationId":"createVoice","summary":"Create a cloned voice","description":"Creates a private cloned voice from a clean 10–30 second sample of one speaker. Requires available voice cloning slots on your plan. Send either a `sample` file (multipart) or a public `sampleUrl` (JSON).","requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["name","sample"],"properties":{"name":{"type":"string","description":"Display name for the voice"},"sample":{"type":"string","format":"binary","description":"MP3, WAV or OGG, up to 20 MB"},"rightsConfirmed":{"type":"boolean","description":"Confirms you own this voice or the speaker consented to cloning it (see the Acceptable Use Policy). Recorded on the voice."}}}},"application/json":{"schema":{"type":"object","required":["name","sampleUrl"],"properties":{"name":{"type":"string","description":"Display name for the voice"},"sampleUrl":{"type":"string","format":"uri","description":"Publicly reachable URL of the voice sample"},"rightsConfirmed":{"type":"boolean","description":"Confirms you own this voice or the speaker consented to cloning it (see the Acceptable Use Policy). Recorded on the voice."}}}}}},"responses":{"201":{"description":"Voice created","content":{"application/json":{"schema":{"type":"object","properties":{"voice":{"$ref":"#/components/schemas/Voice"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/voices/design":{"post":{"operationId":"designVoice","summary":"Design a voice from a description","description":"Generates a new voice from a text description of who is speaking and returns a hosted MP3 sample of it speaking `text` (the description is never spoken). Each design uses characters equal to the length of `text`, with a minimum of 50. This does not create a voice; pass `sampleUrl` to `POST /voices` to keep it. Reuse the returned `seed` with the same description and text to reproduce the voice.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","required":["description","text"],"properties":{"description":{"type":"string","maxLength":500,"description":"Who is speaking: age, gender, pitch, energy, accent, emotion"},"text":{"type":"string","maxLength":1000,"description":"What the sample says"},"language":{"type":"string","description":"Locale of `text`, e.g. `en-US`. Detected when omitted"},"seed":{"type":"integer","minimum":0,"maximum":2147483647,"description":"Omit for a new random voice"}}},"example":{"description":"A youthful, energetic, enthusiastic American woman","text":"Hey there! I am so excited to show you what we built this week."}}}},"responses":{"200":{"description":"Designed voice sample","content":{"application/json":{"schema":{"type":"object","properties":{"sampleUrl":{"type":"string","format":"uri"},"seed":{"type":"integer"},"duration":{"type":"number","description":"Sample length in seconds"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/voices/{voiceId}":{"get":{"operationId":"getVoice","summary":"Get a voice","description":"Returns one voice: any voice in the public library, or one of your own private voices.","parameters":[{"name":"voiceId","in":"path","required":true,"description":"Voice `id` (or a legacy `pv:` id)","schema":{"type":"string"}}],"responses":{"200":{"description":"The voice","content":{"application/json":{"schema":{"type":"object","properties":{"voice":{"$ref":"#/components/schemas/Voice"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"patch":{"operationId":"updateVoice","summary":"Update one of your voices","description":"Changes the name, description, labels, language or avatar of one of your own voices. Send only the fields to change. Edits to a published voice show in the public library right away. For the avatar, upload an image as multipart `avatar`, or send a public `avatarUrl`; either way it is cropped to a 200×200 square.","parameters":[{"name":"voiceId","in":"path","required":true,"description":"Voice `id` (or a legacy `pv:` id)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateVoiceRequest"},"example":{"description":"Deep, calm narrator","labels":["Narrator","Male"],"language":"en-US"}},"multipart/form-data":{"schema":{"type":"object","properties":{"name":{"type":"string"},"description":{"type":"string"},"labels":{"type":"string","description":"Comma-separated labels"},"language":{"type":"string"},"avatar":{"type":"string","format":"binary","description":"PNG, JPEG or WebP image, up to 5 MB"}}}}}},"responses":{"200":{"description":"The updated voice","content":{"application/json":{"schema":{"type":"object","properties":{"voice":{"$ref":"#/components/schemas/Voice"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"operationId":"deleteVoice","summary":"Delete one of your voices","parameters":[{"name":"voiceId","in":"path","required":true,"description":"Voice `id` (or a legacy `pv:` id)","schema":{"type":"string"}}],"responses":{"200":{"description":"Voice deleted","content":{"application/json":{"schema":{"type":"object","properties":{"deleted":{"type":"boolean"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/voices/{voiceId}/sample":{"put":{"operationId":"replaceVoiceSample","summary":"Replace the sample of one of your voices","description":"Clones one of your voices again from a new clean 10–30 second sample of one speaker. The voice keeps its ID, name and other details; speech generated from then on uses the new sample, and its preview clip is cleared. Counts as one voice creation toward the plan's monthly limit but uses no extra voice slot. Send either a `sample` file (multipart) or a public `sampleUrl` (JSON). `rightsConfirmed` is required when the voice is published.","parameters":[{"name":"voiceId","in":"path","required":true,"description":"Voice `id` (or a legacy `pv:` id)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["sample"],"properties":{"sample":{"type":"string","format":"binary","description":"MP3, WAV or OGG, up to 20 MB"},"rightsConfirmed":{"type":"boolean","description":"Confirms you own this voice or the speaker consented to cloning it (see the Acceptable Use Policy). Required for published voices."}}}},"application/json":{"schema":{"type":"object","required":["sampleUrl"],"properties":{"sampleUrl":{"type":"string","format":"uri","description":"Publicly reachable URL of the new voice sample"},"rightsConfirmed":{"type":"boolean","description":"Confirms you own this voice or the speaker consented to cloning it (see the Acceptable Use Policy). Required for published voices."}}}}}},"responses":{"200":{"description":"The voice with its new sample","content":{"application/json":{"schema":{"type":"object","properties":{"voice":{"$ref":"#/components/schemas/Voice"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/voices/{voiceId}/publish":{"post":{"operationId":"publishVoice","summary":"Publish one of your voices","description":"Adds a private voice to the public voice library, where anyone can find it and generate speech with it.","parameters":[{"name":"voiceId","in":"path","required":true,"description":"Voice `id` (or a legacy `pv:` id)","schema":{"type":"string"}}],"responses":{"200":{"description":"The published voice","content":{"application/json":{"schema":{"type":"object","properties":{"voice":{"$ref":"#/components/schemas/Voice"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/voices/{voiceId}/unpublish":{"post":{"operationId":"unpublishVoice","summary":"Unpublish one of your voices","description":"Removes a published voice from the public library; it stays in your voices.","parameters":[{"name":"voiceId","in":"path","required":true,"description":"Voice `id` (or a legacy `pv:` id)","schema":{"type":"string"}}],"responses":{"200":{"description":"The voice, private again","content":{"application/json":{"schema":{"type":"object","properties":{"voice":{"$ref":"#/components/schemas/Voice"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/voices/{voiceId}/preview":{"post":{"operationId":"renderVoicePreview","summary":"Render a voice preview","description":"Returns the voice's short preview clip (the `previewText` line), rendering it on first call. Later calls return the stored clip. Rendering uses the voice owner's credits. Changing the voice language clears the preview so the next call renders it again.","parameters":[{"name":"voiceId","in":"path","required":true,"description":"Voice `id` (or a legacy `pv:` id)","schema":{"type":"string"}}],"responses":{"200":{"description":"Preview clip","content":{"application/json":{"schema":{"type":"object","required":["previewUrl"],"properties":{"previewUrl":{"type":"string","format":"uri","description":"MP3 URL"},"duration":{"type":"number","description":"Seconds; only set when the clip was rendered by this call"}}}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/generate-speech":{"post":{"operationId":"generateSpeech","summary":"Generate speech","description":"Generates speech with the selected voice and returns an MP3 file. Provide either `text` or `ssml`. Save the response body to a file.","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateSpeechRequest"},"example":{"voiceId":"msa.en-US.SerenaMultilingual","text":"My name is Serena and I am a voice from Lazybird."}}}},"responses":{"200":{"description":"MP3 audio","content":{"audio/mpeg":{"schema":{"type":"string","format":"binary"}}}},"400":{"description":"Invalid input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or invalid API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"422":{"description":"Plan limit reached (credits, voice slots or plan feature)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many requests; retry after `Retry-After` seconds","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"apiKeyHeader":{"type":"apiKey","in":"header","name":"X-API-Key"},"apiKeyQuery":{"type":"apiKey","in":"query","name":"api_key"}},"schemas":{"Voice":{"type":"object","required":["id","displayName"],"properties":{"id":{"type":"string","description":"Pass as `voiceId`. Treat as opaque."},"displayName":{"type":"string"},"description":{"type":"string"},"labels":{"type":"array","items":{"type":"string"}},"language":{"type":"string","description":"Primary locale, e.g. `en-US`"},"secondaryLocaleList":{"type":"array","items":{"type":"string"},"description":"Other locales the voice can speak via `settings.locale`"},"gender":{"type":"string"},"styleList":{"type":"array","items":{"type":"string"},"description":"Values accepted by `settings.style`"},"previewText":{"type":"string"},"previewUrl":{"type":"string","format":"uri"},"avatar":{"type":"string"},"scope":{"type":"string","description":"`global`, `community` or `user`"},"published":{"type":"boolean"},"mine":{"type":"boolean"}}},"UpdateVoiceRequest":{"type":"object","description":"Send only the fields to change","properties":{"name":{"type":"string"},"description":{"type":"string"},"labels":{"type":"array","items":{"type":"string","enum":["Male","Female","Child","Young Adult","Adult","Elder","Narrator","Audiobook","Podcast","Character","Celebrity","Streamer"]},"description":"Replaces the voice's labels"},"language":{"type":"string","description":"Primary locale such as `en-US` or `ja-JP`; an empty string clears it"},"avatarUrl":{"type":"string","format":"uri","description":"Public PNG, JPEG or WebP image URL"}}},"Account":{"type":"object","properties":{"userId":{"type":"string"},"email":{"type":"string"},"plan":{"type":"object","properties":{"tier":{"type":"string","description":"`free`, `creator`, `pro`, `max`, or `legacy` for older plans"},"name":{"type":"string"},"isPaid":{"type":"boolean"}}},"credits":{"type":"object","properties":{"used":{"type":"integer"},"limit":{"type":"integer"},"extraCredits":{"type":"integer"},"remaining":{"type":"integer"},"resetsAt":{"type":"string","format":"date-time"}}}}},"VoiceSettings":{"type":"object","description":"All fields optional","properties":{"style":{"type":"string","description":"Speaking style from the voice's `styleList`"},"styleIntensity":{"type":"number","description":"Strength of the style"},"speed":{"type":"number","description":"1 is normal speed"},"pitch":{"type":"number","description":"1 is the default pitch"},"volume":{"type":"number","description":"1 is the default volume"},"locale":{"type":"string","description":"BCP-47 locale override for multilingual and cloned voices, e.g. `es-ES`"}}},"GenerateSpeechRequest":{"type":"object","required":["voiceId"],"properties":{"voiceId":{"type":"string","description":"Voice `id` from GET /voices"},"text":{"type":"string","description":"Plain text to speak"},"ssml":{"type":"string","description":"SSML (use instead of `text` for pauses or markup)"},"settings":{"$ref":"#/components/schemas/VoiceSettings"}}},"Error":{"type":"object","properties":{"error":{"type":"string"},"name":{"type":"string"},"code":{"type":"string"},"details":{}}}}}}