Public API
What is a Speech-to-Text API
A Speech-to-Text API turns audio and video into text programmatically—without manual uploads in the browser. The Polyglot Voice API fits bots, CRMs, call centers, edtech, and media products: send a file or URL, poll status or use a webhook, then fetch the transcript, translation, and export files (SRT, TXT, JSON). Processing runs in the Polyglot Voice cloud—you do not deploy or download recognition models on your side.
API capabilities
- Speech recognition to text (98+ languages)
- Transcript and video content translation
- Automatic subtitles and SRT/TXT export
- Interview, lecture, and call transcription
- Webhooks on completion and status polling
When to use the web UI vs the API
Web interface
One-off jobs, manual review, translation, voiceover and clips.
API
Automation, product integration, bots, bulk processing and webhooks.
Price starting point
Transcription starts from 49 RUB per fast minute/unit. TTS pack: 499 RUB for 500,000 characters.
View pricingFast integration path
- Step 1Create API key
- Step 2POST upload/from-url
- Step 3Receive webhook or poll status
- Step 4GET result/download
Base URL
Use the base URL for all API requests.
https://polyglotvoice.ru/api/v1
Authorization
The endpoints below accept Authorization: Bearer with your site session JWT or an API key sk_….
Authorization: Bearer sk_...
The sk_… key is created in your profile, lasts 30 days, and applies only to transcriptions/*; the rest of the site uses JWT. Either credential works for these routes.
How to get an API key
- Sign in to your account.
- Open Profile → “API keys”.
- Create a key and save it (shown once).
- Use the key in requests.
Endpoints
Core endpoints for working with transcriptions.
POST /api/v1/transcriptions/uploadUpload a file for transcription.
POST /api/v1/transcriptions/from-urlTranscribe from a media URL.
POST /api/v1/transcriptions/validate-urlValidate a media URL before processing.
GET /api/v1/transcriptionsList transcription tasks.
GET /api/v1/transcriptions/{task_id}Task details.
GET /api/v1/transcriptions/{task_id}/resultTranscription result.
GET /api/v1/transcriptions/{task_id}/downloads/{kind}Download result file (srt/txt/json etc.).
GET /api/v1/transcriptions/{task_id}/sourceStream the source media (Range).
POST /api/v1/transcriptions/convert-audioConvert audio and download the result.
Request examples
Basic examples to get started.
curl
curl -X POST "https://polyglotvoice.ru/api/v1/transcriptions/upload" \ -H "Authorization: Bearer sk_..." \ -F "file=@audio.mp3"
Python
import requests
url = "https://polyglotvoice.ru/api/v1/transcriptions/upload"
headers = {"Authorization": "Bearer sk_..."}
files = {"file": open("audio.mp3", "rb")}
response = requests.post(url, headers=headers, files=files)
print(response.json())JavaScript
const formData = new FormData();
formData.append("file", file);
fetch("https://polyglotvoice.ru/api/v1/transcriptions/upload", {
method: "POST",
headers: { Authorization: "Bearer sk_..." },
body: formData
})
.then((res) => res.json())
.then(console.log);File formats
Popular audio and video formats are supported.
For example: mp3, wav, m4a, ogg, mp4, webm.
Task statuses
A transcription task moves through these statuses:
- queued — accepted, waiting to process
- processing — media is being processed
- completed — result ready; fetch text and downloads
- failed — processing error (see failure_reason)
- cancelled — cancelled by the user
Responses and errors
Example of task creation response and auth error.
Task created (HTTP 200)
{ "task_id": "9b9c1b9a-....", "status": "queued" }Task after processing (GET /transcriptions/{task_id})
{
"task_id": "9b9c1b9a-....",
"status": "completed",
"model": "fast",
"input_language": "en",
"output_language": "ru",
"audio_duration_seconds": 125.4,
"confidence": 0.94,
"transcript_preview": "Hello, this is a sample transcript..."
}Full result (GET /transcriptions/{task_id}/result)
{
"task_id": "9b9c1b9a-....",
"transcript": "Hello, this is a sample transcript...",
"translation": "Привет, это пример транскрипта...",
"segments": [{ "start": 0.0, "end": 2.4, "text": "Hello..." }],
"confidence": 0.94,
"updated_at": "2026-05-24T12:00:00Z"
}Result files: GET /transcriptions/{task_id}/downloads/{kind} — kind: srt, txt, json, etc.
401
{ "detail": "Invalid token." }Webhook
Set a webhook URL in your profile for the sk_ API key. When a task reaches a final status, Polyglot Voice sends an HTTP POST to your URL. Headers: Content-Type: application/json, X-Polyglot-Timestamp, X-Polyglot-Signature (HMAC-SHA256 over the body). Fetch the full transcript via GET /transcriptions/{task_id}/result.
Sample webhook body
POST https://client.example.com/webhook
{
"event": "transcription.completed",
"task_id": "9b9c1b9a-....",
"status": "completed",
"model": "fast",
"failure_reason": null,
"has_transcript": true,
"has_translation": true,
"transcript_preview": "Hello, this is a sample..."
}HTTP error codes
Typical API error responses:
- 400 — bad request (parameters, format, URL)
- 401 — invalid or missing key/token
- 403 — access denied
- 404 — task or file not found
- 429 — rate limit exceeded (see Limits)
- 500 — internal server error
Limits
These values are enforced by the API. Short-term (burst) limits apply per signed-in user — the same account whether you use a session JWT or an sk_ key. Daily and monthly counters count every request made with any of your sk_ keys (UTC calendar day and month). When a limit is exceeded, the API responds with HTTP 429.
The live JSON field rate_limits is returned by:
GET https://polyglotvoice.ru/api/v1/developer/documentationLoading current limits…
In addition: each plan limits max audio length per file, max upload size, concurrent tasks, and (on the website) daily uploads. See your subscription on the dashboard.
FAQ
Which formats are supported?
Popular audio and video: mp3, wav, m4a, ogg, mp4, webm, and more. Upload a file or pass a media URL.
How do I get an API key?
Sign in → Profile → API keys → create an sk_ key and save it (shown once).
Is there a webhook?
Yes. Set the URL on your API key; on completion or failure you receive a signed POST.
What are the limits?
Per-minute burst limits per user and daily/monthly limits per plan for sk_ keys. Current values are in the Limits section below and GET /developer/documentation.
Is there a free plan?
Yes—a free tier with limits on minutes and attempts. See the pricing page for details.