Skip to main content

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

  1. Create an API key in the Skillies console.
  2. Set it as SKILLIES_API_KEY.
  3. Call the endpoint.
  4. 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.wav

POST /v1/text-to-speech

Send text. Get one audio/wav file.

text
string, required
Text to speak. Malayalam is ready. Hindi, Tamil, English are in testing. Max 3,000 chars.
voice_id
string, required
A voice from GET /v1/voices.
language
string, 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 unauthorized
Missing or bad API key.
400 invalid_input
Check text and voice_id.
402 quota_exceeded
Add more credits.
403 account_suspended
The workspace is suspended.
404 unknown_voice
Voice not found.
422 unspeakable_text
Change the text and retry.
429 rate_limited
Slow down.
502 synthesis_failed
Retry in a moment.

Errors use JSON: { "error": "code", "message": "..." }.