API Reference

An OpenAI-compatible REST API for speech, transcription and voices. Point an existing client at our base URL and it works.

Base URL and authentication

Every request is authenticated with a bearer token. Keys are created in your dashboard and belong on the server side.

https://api.kiritts.com/v1
Authorization: Bearer YOUR_API_KEY
Create an API key

Endpoints

The full surface. Paths are relative to the host above.

Speech

POST/v1/audio/speechGenerate audio from text. Returns the audio file itself.
WS/v1/realtimeStream speech as it is generated, or stream microphone audio in for live transcription.

Transcription

POST/v1/audio/transcriptionsTranscribe a file and wait for the transcript on the same connection.
POST/v1/audio/transcriptions/jobsQueue a transcription and get a job id back immediately. Use this for long audio.
GET/v1/audio/transcriptions/jobs/{id}Check a job’s status.
GET/v1/audio/transcriptions/jobs/{id}/contentDownload a finished job’s transcript.

Voices & models

GET/v1/voicesEvery voice your key can use, built-in and cloned.
GET/v1/modelsAvailable models, in OpenAI’s list shape.
POST/v1/audio/voice-clonesCreate a cloned voice from a reference recording.
GET/v1/audio/voice-clonesList the cloned voices on your account.

Create speech

POST /v1/audio/speech. The response body is the audio file, so write it to disk or stream it straight to a player.

curl https://api.kiritts.com/v1/audio/speech \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kiritts",
"input": "សួស្តី ពិភពលោក! Hello, world!",
"voice": "Maly",
"response_format": "mp3"
}' \
--output speech.mp3
ParameterTypeDescription
modelrequiredstringModel id, for example kiritts. GET /v1/models lists what your key can use.
inputrequiredstringText to speak. Up to 4096 characters.
voicerequiredstringVoice name, or a cloned voice from your account.
instructionsstringStyle guidance: tone, emotion, pacing. Up to 100 characters.
response_formatstringmp3 (default), opus, aac, flac, wav or pcm.
speednumber0.7 to 1.2. Defaults to 1.0.
stream_formatstringsse for delta events, audio for raw chunks. Omit for a complete file.

Create a transcription

POST /v1/audio/transcriptions as multipart form data. For long or unattended audio, queue a job instead so a timeout cannot lose the work.

curl https://api.kiritts.com/v1/audio/transcriptions \
-H "Authorization: Bearer YOUR_API_KEY" \
-F "file=@meeting.mp3" \
-F "model=kiristt" \
-F "response_format=verbose_json" \
-F "timestamp_granularities=word,segment"
ParameterTypeDescription
filerequiredfileThe audio to transcribe, sent as multipart form data.
modelrequiredstringTranscription model id — kiristt for files. GET /v1/models lists them all.
languagestringBCP-47 hint such as km-KH. Detected automatically when omitted.
promptstringContext to bias the transcript, such as names or jargon.
response_formatstringjson (default), text, verbose_json, srt or vtt.
temperaturenumberSampling temperature.
timestamp_granularitiesstring[]word, segment, or both. Requires response_format=verbose_json.

Errors

Failures come back as JSON with a detail message and the matching status code.

// 401 — missing or invalid API key
{ "detail": "Invalid credentials" }
// 403 — plan has no API access, or someone else's cloned voice
{ "detail": "Your plan does not include API access." }
// 429 — monthly credit limit reached
{ "detail": "Monthly credit limit exceeded" }
// 429 — rate limit (plan-based; default 100/min) — wait and retry
{ "detail": "Rate limit exceeded: 100 per 1 minute" }

Playground

Send a real request with your own key and hear the result.

Realtime, voices, cloning and limits

Streaming sockets, the voice catalogue, cloning rules and per-plan rate limits are covered in the main documentation.

Open the documentation