How to Add Voice to Mobile Apps with ElevenLabs API
How to Add Voice to Mobile Apps with ElevenLabs API
Disclosure: This post contains affiliate links (#ad). If you purchase through our links, we may earn a commission at no extra cost to you.
How to Integrate ElevenLabs into a Mobile App?
Via the ElevenLabs REST API. You send text to the API endpoint, and it returns high-quality audio. Integrate it into iOS (Swift), Android (Kotlin), or cross-platform (Flutter, React Native) apps with a few lines of code. No on-device ML models required — ElevenLabs handles the heavy lifting server-side.
Adding voice to your mobile app used to mean building custom TTS models, licensing expensive SDKs, or sounding robotic with built-in OS voices. ElevenLabs changes that.
What Can You Voice-Enable in a Mobile App?
- Reading content aloud: Articles, books, messages, news feeds
- Voice UI: Navigation prompts, confirmation messages, error feedback
- Language learning: Pronunciation examples, phrase repetition
- Accessibility features: Screen reading for visually impaired users
- AI assistants: In-app chatbots with spoken responses
- Guided experiences: Meditation, workout coaching, audio tours
- Storytelling apps: Children’s books narrated on demand
Integration Tutorial by Platform
iOS / Swift Integration
Call the ElevenLabs TTS endpoint from your Swift app:
import Foundation
import AVFoundation
func generateSpeech(text: String) {
let url = URL(string: "https://api.elevenlabs.io/v1/text-to-speech/YOUR_VOICE_ID")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("YOUR_API_KEY", forHTTPHeaderField: "xi-api-key")
let body: [String: Any] = [
"text": text,
"model_id": "eleven_multilingual_v2",
"voice_settings": ["stability": 0.5, "similarity_boost": 0.75]
]
request.httpBody = try? JSONSerialization.data(withJSONObject: body)
URLSession.shared.dataTask(with: request) { data, _, _ in
guard let data = data else { return }
// Play audio with AVAudioPlayer
let player = try? AVAudioPlayer(data: data)
player?.play()
}.resume()
}
Android / Kotlin Integration
import okhttp3.*
import java.io.IOException
val client = OkHttpClient()
fun generateSpeech(text: String) {
val json = """
{
"text": "$text",
"model_id": "eleven_multilingual_v2",
"voice_settings": {"stability": 0.5, "similarity_boost": 0.75}
}
""".trimIndent()
val request = Request.Builder()
.url("https://api.elevenlabs.io/v1/text-to-speech/YOUR_VOICE_ID")
.addHeader("xi-api-key", "YOUR_API_KEY")
.post(json.toRequestBody(MediaType.parse("application/json")))
.build()
client.newCall(request).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
val audioBytes = response.body?.bytes()
// Play audio with MediaPlayer
}
override fun onFailure(call: Call, e: IOException) {}
})
}
Flutter Integration
import 'package:http/http.dart' as http;
import 'package:audioplayers/audioplayers.dart';
Future<void> generateSpeech(String text) async {
final response = await http.post(
Uri.parse('https://api.elevenlabs.io/v1/text-to-speech/YOUR_VOICE_ID'),
headers: {
'Content-Type': 'application/json',
'xi-api-key': 'YOUR_API_KEY',
},
body: jsonEncode({
'text': text,
'model_id': 'eleven_multilingual_v2',
'voice_settings': {'stability': 0.5, 'similarity_boost': 0.75},
}),
);
if (response.statusCode == 200) {
final player = AudioPlayer();
await player.playBytes(response.bodyBytes);
}
}
React Native Integration
import RNFS from 'react-native-fs';
import Sound from 'react-native-sound';
async function generateSpeech(text) {
const response = await fetch(
'https://api.elevenlabs.io/v1/text-to-speech/YOUR_VOICE_ID',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
'xi-api-key': 'YOUR_API_KEY',
},
body: JSON.stringify({
text,
model_id: 'eleven_multilingual_v2',
voice_settings: { stability: 0.5, similarity_boost: 0.75 },
}),
}
);
const audioPath = `${RNFS.CachesDirectoryPath}/speech.mp3`;
const blob = await response.blob();
await RNFS.writeFile(audioPath, blob, 'base64');
const sound = new Sound(audioPath, '', (error) => {
if (!error) sound.play();
});
}
API Best Practices for Mobile
- Cache generated audio locally — don’t re-generate the same text twice
- Pre-generate common phrases on app startup for instant playback
- Stream audio for long-form content instead of waiting for full download
- Handle network errors gracefully — fall back to device TTS if API is unavailable
- Use the multilingual model for apps serving users in different languages
- Store API keys securely — use a backend proxy, never expose keys in client code
Real-World App Examples
- Reading app: 10,000+ daily users, all articles read aloud in natural voice
- Language learning app: 40+ languages, native pronunciation for every word
- Meditation app: Custom voice for guided sessions, generated daily
- AI tutor app: Real-time voice responses to student questions
Pricing for Mobile Integration
ElevenLabs charges per character processed. For a typical mobile app reading 5,000 characters per user per day:
