API docs
Make Malayalam speech with one REST API. Start free. Extra use is ₹4 per 1,000 chars. Plans start at ₹999. See Pricing.
Quickstart
- Create an API key in the Skillies console.
- Set it as
SKILLIES_API_KEY. - Call the endpoint.
- Save the WAV file.
API base: https://voice.skillies.ai/v1
curl https://voice.skillies.ai/v1/text-to-speech \
-H "Authorization: Bearer $SKILLIES_API_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"നമസ്കാരം! Welcome to Skillies Voice.","voice_id":"ehsan"}' \
--output speech.wavPOST /v1/text-to-speech
Send text. Get one audio/wav file.
textstring, required
Text to speak. Malayalam is ready. Hindi, Tamil, English are in testing. Max 3,000 chars.
voice_idstring, required
A voice from GET /v1/voices.
languagestring, optional
Example: "ml". We auto-detect if empty.
Node.js
// save as speak.mjs, run with: node speak.mjs
import { writeFileSync } from "node:fs";
const res = await fetch("https://voice.skillies.ai/v1/text-to-speech", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.SKILLIES_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ text: "നമസ്കാരം!", voice_id: "ehsan" }),
});
writeFileSync("speech.wav", Buffer.from(await res.arrayBuffer()));Python
import os, requests
res = requests.post(
"https://voice.skillies.ai/v1/text-to-speech",
headers={"Authorization": f"Bearer {os.environ['SKILLIES_API_KEY']}"},
json={"text": "നമസ്കാരം!", "voice_id": "ehsan"},
)
open("speech.wav", "wb").write(res.content)GET /v1/voices
List the voices you can use: the curated public catalog plus your workspace's ready clones. Pass any voice_id from the response to /v1/text-to-speech.
curl https://voice.skillies.ai/v1/voices \
-H "Authorization: Bearer $SKILLIES_API_KEY"Response
{
"voices": [
{
"voice_id": "ehsan",
"name": "Ehsan",
"language": "Malayalam · multilingual",
"gender": "male",
"description": "The Skillies founder voice.",
"sample_url": null,
"type": "public"
},
{
"voice_id": "priya-workspace",
"name": "Priya",
"language": "multilingual",
"gender": null,
"description": "Private voice cloned in this Skillies workspace.",
"sample_url": null,
"type": "custom"
}
]
}Errors & limits
401 unauthorizedMissing or bad API key.
400 invalid_inputCheck text and voice_id.
402 quota_exceededAdd more credits.
403 account_suspendedThe workspace is suspended.
404 unknown_voiceVoice not found.
422 unspeakable_textChange the text and retry.
429 rate_limitedSlow down.
502 synthesis_failedRetry in a moment.
Errors use JSON: { "error": "code", "message": "..." }.
