Documentation
Build with the Synora API
Add Uzbek speech recognition, natural voices, real-time voice agents and phone calls to your product with a single REST API. This guide takes you from your first API key to your first request in a few minutes.
Quickstart
Three steps to your first transcription.
- 1
Create an account
Sign up or sign in with Google, then open your account. API requests use your prepaid balance; guest trials have separate quotas.
- 2
Get an API key
Open Developers → API tokens. Create a token, copy it once and keep it on your server. STT/TTS usage charges your balance; the token cannot manage your account or admin settings.
- 3
Send your first request
Upload an audio file to the Speech to Text endpoint and get the transcript back as JSON.
curl https://synora-ai.uz/api/v1/stt/transcribe \
-H "Authorization: Bearer $SYNORA_API_KEY" \
-F "file=@meeting.wav" \
-F "language=uz" \
-F "model=gemini"Authentication
Every request must include your API key in the Authorization header. Requests without a valid key return 401 Unauthorized.
HTTP header
Authorization: Bearer YOUR_API_KEYNever put your API key in frontend code or a public repository. Call the API from your server and rotate the key in the dashboard if it leaks.
Endpoints
Base URL: https://synora-ai.uz/api/v1
| Method | Endpoint | Description |
|---|---|---|
| POST | /stt/transcribe | Transcribe an audio file |
| WS | /stt/stream | Real-time transcription over WebSocket |
| POST | /tts/speech | Synthesize speech from text |
| GET | /tts/voices | List available voices |
Speech to Text
POST /stt — send an audio file as multipart/form-data and receive the transcript.
| Parameter | Type | Description |
|---|---|---|
file | file | Audio file — WAV, MP3, OGG or FLAC, up to 100 MB |
language | string | uz, ru or en. Default: uz |
model | string | synora or gemini. Default: synora |
timestamps | boolean | Return word-level timestamps. Default: false |
Response · 200 OK
{
"ok": true,
"ai_session_id": "a80717ac-3c34-4938-9eae-ef6873f3ceca",
"text": "Assalomu alaykum, qabulga yozilmoqchi edim.",
"language": "uz",
"audio_ms": 4820,
"price_micros": 1500000,
"price": "1.500000",
"model": "gemini"
}Errors
Errors use standard HTTP status codes and return a JSON body with a code and a human-readable message.
| Status | Code | Meaning |
|---|---|---|
| 400 | invalid_request | A parameter is missing or has a wrong value |
| 401 | unauthorized | The API key is missing or invalid |
| 402 | insufficient_balance | Top up your balance to continue |
| 413 | file_too_large | Audio file is larger than 100 MB |
| 429 | rate_limited | Too many requests — slow down and retry |
| 500 | server_error | Something went wrong on our side |
Rate limits
Limits are applied per API key. Contact us if you need higher limits.
60
requests per minute
10
concurrent streams
5
parallel agent calls
Need help integrating?
Message our engineers on Telegram — we usually reply within an hour on working days.