Overview
The Lazybird Speech API lets you list available voices, generate MP3 speech from text or SSML, and create private cloned voices.
Base URL:
1https://api.lazybird.app/v1Authentication
Create an API key from your Lazybird Studio settings, then send it with each request.
Preferred header:
1X-API-Key: YOUR_API_KEYYou can also pass the key as an api_key query parameter when a tool cannot set headers:
1https://api.lazybird.app/v1/voices?api_key=YOUR_API_KEYKeep API keys private. Do not expose them in browser code, mobile apps, public repositories, or client-side logs.
Agent skill
When you are using an AI coding agent, install the official Lazybird API skill so the agent has the current API shape, examples, and integration gotchas available in context.
1npx skills add lazybirdai/skills --agent codex --skill lazybird-apiQuickstart
Generate speech with a known voice ID:
1curl -X POST "https://api.lazybird.app/v1/generate-speech" \2 -H "X-API-Key: $LAZYBIRD_API_KEY" \3 -H "Content-Type: application/json" \4 --output speech.mp3 \5 --data '{6 "voiceId": "msa.en-US.SerenaMultilingual",7 "text": "My name is Serena and I am a voice from Lazybird."8 }'The response is an MP3 audio file. Save the response body to a file instead of trying to display it as JSON.
Check service status
1GET /statusReturns the current API health.
Example:
1curl "https://api.lazybird.app/v1/status"Response:
1{2 "status": "ok"3}List voices
1GET /voicesReturns voices that can be used with generate-speech.
Example:
1curl "https://api.lazybird.app/v1/voices" \2 -H "X-API-Key: $LAZYBIRD_API_KEY"Response:
1[2 {3 "id": "msa.en-US.Jenny",4 "displayName": "Jenny",5 "language": "English (United States)",6 "gender": "Female",7 "previewText": "Hi, I am Jenny.",8 "avatar": "https://example.com/avatar.jpg"9 }10]Use the id value as voiceId when generating speech.
Generate speech
1POST /generate-speechGenerates speech with the selected voice and returns an MP3 audio file.
Headers:
| Header | Required | Value |
|---|---|---|
X-API-Key |
Yes | Your Lazybird API key |
Content-Type |
Yes | application/json |
Body:
| Field | Type | Required | Description |
|---|---|---|---|
voiceId |
string | Yes | Voice ID from /voices |
text |
string | No | Plain text to convert to speech |
ssml |
string | No | SSML content. Use this instead of text when you need pauses or speech markup. |
settings |
object | No | Optional voice settings for this generation |
Provide either text or ssml.
Plain text example
1curl -X POST "https://api.lazybird.app/v1/generate-speech" \2 -H "X-API-Key: $LAZYBIRD_API_KEY" \3 -H "Content-Type: application/json" \4 --output speech.mp3 \5 --data '{6 "voiceId": "msa.en-US.SerenaMultilingual",7 "text": "My name is Serena and I am a voice from Lazybird."8 }'SSML example
1curl -X POST "https://api.lazybird.app/v1/generate-speech" \2 -H "X-API-Key: $LAZYBIRD_API_KEY" \3 -H "Content-Type: application/json" \4 --output speech.mp3 \5 --data '{6 "voiceId": "msa.en-US.SerenaMultilingual",7 "ssml": "<speak>My name is Serena <break time=\"1s\"/> and I am a voice from Lazybird.</speak>"8 }'Voice settings example
All settings fields are optional.
1{2 "voiceId": "msa.en-US.SerenaMultilingual",3 "text": "This line is slower and slightly higher pitched.",4 "settings": {5 "style": "sad",6 "speed": 0.7,7 "pitch": 1.2,8 "volume": 1,9 "styleIntensity": 1,10 "locale": "es-ES"11 }12}Settings:
| Field | Type | Description |
|---|---|---|
style |
string | Speaking style or tone, when supported by the selected voice |
speed |
number | Speech speed. 1 is normal speed. |
pitch |
number | Voice pitch. 1 is the default pitch. |
volume |
number | Output volume. 1 is the default volume. |
styleIntensity |
number | Strength of the selected speaking style |
locale |
string | BCP-47 locale override, such as en-US, es-ES, fr-FR, de-DE, or ja-JP, when supported by the selected voice |
Locale override
Use settings.locale to choose the spoken language or accent for multilingual voices. This is especially important for personal voices, which can be synthesized in different languages by passing a locale override.
1curl -X POST "https://api.lazybird.app/v1/generate-speech" \2 -H "X-API-Key: $LAZYBIRD_API_KEY" \3 -H "Content-Type: application/json" \4 --output spanish.mp3 \5 --data '{6 "voiceId": "msa.en-US.SerenaMultilingual",7 "text": "Hola, este audio usa una configuración regional en español.",8 "settings": {9 "locale": "es-ES"10 }11 }'List personal voices
1GET /personal-voicesReturns cloned voices owned by the authenticated API key's user.
Example:
1curl "https://api.lazybird.app/v1/personal-voices" \2 -H "X-API-Key: $LAZYBIRD_API_KEY"Response:
1{2 "voices": [3 {4 "id": "pv:abc123",5 "name": "Narrator",6 "sampleUrl": "https://cdn.lazybird.app/voice-samples/abc123.mp3"7 }8 ]9}Use the returned pv:<id> value as the voiceId when generating speech with a cloned voice.
Create a personal voice
1POST /personal-voicesCreates a private cloned voice from a publicly reachable voice sample URL. Voice cloning requires a plan with voice cloning access and available voice slots.
Headers:
| Header | Required | Value |
|---|---|---|
X-API-Key |
Yes | Your Lazybird API key |
Content-Type |
Yes | application/json |
Body:
| Field | Type | Required | Description |
|---|---|---|---|
name |
string | Yes | Display name for the cloned voice |
sampleUrl |
string | Yes | Public URL for the source voice sample |
Example:
1curl -X POST "https://api.lazybird.app/v1/personal-voices" \2 -H "X-API-Key: $LAZYBIRD_API_KEY" \3 -H "Content-Type: application/json" \4 --data '{5 "name": "Narrator",6 "sampleUrl": "https://example.com/sample.wav"7 }'Generate speech with a personal voice
You can call the normal speech endpoint with a pv: voice ID:
1curl -X POST "https://api.lazybird.app/v1/generate-speech" \2 -H "X-API-Key: $LAZYBIRD_API_KEY" \3 -H "Content-Type: application/json" \4 --output cloned.mp3 \5 --data '{6 "voiceId": "pv:abc123",7 "text": "Este audio usa mi voz clonada en español.",8 "settings": {9 "locale": "es-ES"10 }11 }'Or use the explicit personal voice synthesis endpoint:
1POST /personal-voices/{voiceId}/generate-speech1curl -X POST "https://api.lazybird.app/v1/personal-voices/pv:abc123/generate-speech" \2 -H "X-API-Key: $LAZYBIRD_API_KEY" \3 -H "Content-Type: application/json" \4 --output cloned.mp3 \5 --data '{6 "text": "This uses my cloned voice."7 }'This endpoint accepts the same text, ssml, settings, pauses, and cacheKey fields as POST /generate-speech.
Delete a personal voice
1DELETE /personal-voices/{voiceId}Example:
1curl -X DELETE "https://api.lazybird.app/v1/personal-voices/pv:abc123" \2 -H "X-API-Key: $LAZYBIRD_API_KEY"Responses
Successful generate-speech requests return an MP3 file.
1HTTP/1.1 200 OK2Content-Type: audio/mpegIf a request fails, check that your API key is valid, the voiceId exists, and the request includes either text or ssml.
Testing tips
- Make API requests from a server environment, not browser code.
- Start by calling
/voicesand copying a voice ID from the response. - Save
generate-speechresponses with--output speech.mp3. - Keep SSML valid XML. Escape quotation marks correctly when sending SSML inside JSON.