Base URL and authentication
Every request is authenticated with a bearer token. Keys are created in your dashboard and belong on the server side.
Endpoints
The full surface. Paths are relative to the host above.
Speech
/v1/audio/speechGenerate audio from text. Returns the audio file itself./v1/realtimeStream speech as it is generated, or stream microphone audio in for live transcription.Transcription
/v1/audio/transcriptionsTranscribe a file and wait for the transcript on the same connection./v1/audio/transcriptions/jobsQueue a transcription and get a job id back immediately. Use this for long audio./v1/audio/transcriptions/jobs/{id}Check a job’s status./v1/audio/transcriptions/jobs/{id}/contentDownload a finished job’s transcript.Voices & models
/v1/voicesEvery voice your key can use, built-in and cloned./v1/modelsAvailable models, in OpenAI’s list shape./v1/audio/voice-clonesCreate a cloned voice from a reference recording./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
| Parameter | Type | Description |
|---|---|---|
modelrequired | string | Model id, for example kiritts. GET /v1/models lists what your key can use. |
inputrequired | string | Text to speak. Up to 4096 characters. |
voicerequired | string | Voice name, or a cloned voice from your account. |
instructions | string | Style guidance: tone, emotion, pacing. Up to 100 characters. |
response_format | string | mp3 (default), opus, aac, flac, wav or pcm. |
speed | number | 0.7 to 1.2. Defaults to 1.0. |
stream_format | string | sse 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"
| Parameter | Type | Description |
|---|---|---|
filerequired | file | The audio to transcribe, sent as multipart form data. |
modelrequired | string | Transcription model id — kiristt for files. GET /v1/models lists them all. |
language | string | BCP-47 hint such as km-KH. Detected automatically when omitted. |
prompt | string | Context to bias the transcript, such as names or jargon. |
response_format | string | json (default), text, verbose_json, srt or vtt. |
temperature | number | Sampling temperature. |
timestamp_granularities | string[] | 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