NoteTakers Speech-to-Text API

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.

Base URL
https://notetakers.vipresearch.ca/stt
Try it: /stt/health
Authentication
None required
Rate limit
10 requests / day / IP
Max upload
500 MB
Formats
wav, mp3, m4a, aac, ogg, opus, flac, 3gp, webm, mp4
CORS
Enabled for all origins

Code examples

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"

Parameters

FieldTypeRequiredDescription
filefileYesThe audio file, sent as multipart/form-data.
enginestringNowhisper (default) · nemotron · qwen3. The heavier engines fall back to Whisper automatically if they fail.
languagestringNoISO code (en, fr, zh, hi, es, ar) or full name. Omit to auto-detect.

Response

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
}

Errors

StatuserrorMeaning
400Missing file field, unknown engine, or the upload isn't decodable audio.
413file too largeUpload exceeds the 500 MB limit.
429daily_limit_reached10 requests/day per IP used up. Calls made from notetakers.vipresearch.ca itself are exempt.
503model_not_ready / busyModel still loading or engine busy — retry after the seconds given in the Retry-After header.
500internal transcription errorUnexpected server-side error.

Every error response is JSON with "success": false and either an error code or a human-readable message.

Health check

Before batch-processing, you can check engine availability and current limits:

GET https://notetakers.vipresearch.ca/stt/health

Live streaming

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.

This protocol is closer to a raw audio pipe than a simple REST call, so instead of six more code samples here, see the working reference implementation in stt_demo.html — it's the same page our own "Try it online" button uses.