A free speech-to-text service you can call from your own app or website — upload audio, get a transcript back in the same response. No signup, no API key.
One endpoint does the whole job: send an audio file, get text back. Pick your language below.
curl -X POST "https://notetakers.vipresearch.ca/stt/v1/transcribe" \ -F "file=@meeting.wav" \ -F "engine=whisper" \ -F "language=en"
| Field | Type | Required | Description |
|---|---|---|---|
file | file | Yes | The audio file, sent as multipart/form-data. |
engine | string | No | whisper (default) · nemotron · qwen3. The heavier engines fall back to Whisper automatically if they fail. |
language | string | No | ISO code (en, fr, zh, hi, es, ar) or full name. Omit to auto-detect. |
A successful request returns 200 with:
{
"success": true,
"text": "This is the transcribed speech.",
"language": "en",
"engine": "whisper",
"duration_seconds": 12.4,
"processing_seconds": 1.8
}
| Status | error | Meaning |
|---|---|---|
| 400 | — | Missing file field, unknown engine, or the upload isn't decodable audio. |
| 413 | file too large | Upload exceeds the 500 MB limit. |
| 429 | daily_limit_reached | 10 requests/day per IP used up. Calls made from notetakers.vipresearch.ca itself are exempt. |
| 503 | model_not_ready / busy | Model still loading or engine busy — retry after the seconds given in the Retry-After header. |
| 500 | internal transcription error | Unexpected server-side error. |
Every error response is JSON with "success": false and either an error code or a human-readable message.
Before batch-processing, you can check engine availability and current limits:
GET https://notetakers.vipresearch.ca/stt/health
For word-by-word live transcription (like Chrome's voice typing) there's also a WebSocket endpoint at wss://notetakers.vipresearch.ca/stt/v1/stream: send a JSON start message, then raw 16 kHz mono PCM16 audio frames, and receive partial/final text events back as you speak.