Transcribe Kurdish Audio to Text

Most speech-recognition services can't handle Kurdish. This API can: it transcribes Sorani and Kurmanji speech with 4.54 character error rate on the FLEURS Sorani benchmark — and you can call it from any language in a few lines. Supported formats: WAV, MP3, FLAC, OGG and M4A.

Step 1 — Get a free STT API key

Create a free account at kurdishtts.com and generate an STT key in Settings → API (STT keys are separate from TTS keys). The free tier includes 120 minutes of audio per month — billing is per audio minute.

Step 2 — Upload the audio

One multipart POST to /api/stt-proxy with the file and the dialect (sorani or kurmanji). curl:

curl -X POST https://www.kurdishtts.com/api/stt-proxy \
  -H "x-api-key: YOUR_STT_KEY" \
  -F "file=@recording.mp3" \
  -F "dialect=sorani"

Python:

import requests

with open("recording.mp3", "rb") as f:
    resp = requests.post(
        "https://www.kurdishtts.com/api/stt-proxy",
        headers={"x-api-key": "YOUR_STT_KEY"},
        files={"file": f},
        data={"dialect": "sorani"},
    )
resp.raise_for_status()

result = resp.json()
print(result["text"])

JavaScript (Node 18+):

import { readFile } from "node:fs/promises";

const form = new FormData();
form.append("file", new Blob([await readFile("recording.mp3")]), "recording.mp3");
form.append("dialect", "sorani");

const resp = await fetch("https://www.kurdishtts.com/api/stt-proxy", {
  method: "POST",
  headers: { "x-api-key": process.env.KURDISHTTS_STT_KEY },
  body: form,
});
if (!resp.ok) throw new Error(await resp.text());

const result = await resp.json();
console.log(result.text);

Step 3 — Read the result

The response is JSON: text holds the transcript (Arabic script for Sorani, Latin for Kurmanji), alongside detected_dialect, detected_script and duration_seconds. Store the text, feed it to a translation step, or index it for search.

Limits & next steps

  • File size: 10MB on the free tier, 50–100MB on paid plans. Free-tier transcripts are capped at 500 characters (the response says so explicitly when truncated).
  • Need live transcription from a microphone? Use the streaming endpoint — see the API reference (/api/stt-stream-connect).
  • Prefer an AI agent doing the work? Connect the MCP server to Claude and just ask it to transcribe.
  • Generating speech instead: Kurdish text-to-speech tutorial.