# Saidwire > Saidwire is a real-time English speech-to-text API for voice agents, phone systems and live captions. Streaming runs over a WebSocket that is compatible with Deepgram's /v1/listen protocol, and file transcription is also available through an OpenAI-compatible /v1/audio/transcriptions endpoint, so most existing clients switch by changing only the base URL and the API key. $0.30 per audio hour, billed per second; 120 free hours with no card. Key facts for code that calls the API: - Streaming endpoint: `wss://api.saidwire.com/v1/listen` (WebSocket). Files: `POST https://api.saidwire.com/v1/listen`. OpenAI-compatible: `POST https://api.saidwire.com/v1/audio/transcriptions` (base URL `https://api.saidwire.com/v1`, model `saidwire-en`). Health: `GET https://api.saidwire.com/health` (no key). - Auth: header `Authorization: Token ` (or `Bearer `). Browsers, which can't set WebSocket headers, pass `["token", key]` as the WebSocket subprotocol. Keys look like `sk_live_.`; get one at https://saidwire.com/dev. Keep keys on a server, read from an environment variable such as `SAIDWIRE_API_KEY`. - English only (`language=en`, `en-US`, `en-GB`, ...). Mono only (`channels=1`). - Audio: `encoding=linear16` (default 16 kHz), `mulaw` or `alaw` (8 kHz telephone audio, no transcoding needed), `linear32`, `opus`, `flac`, `mp3`, `webm`, `ogg`; or omit `encoding` and send a WAV/Ogg/WebM/FLAC/MP3 stream. `sample_rate` 8000-48000. Send binary frames of 20-100 ms in real time. - Streaming parameters that work: `interim_results`, `punctuate`, `smart_format` (same as punctuate: no number formatting), `endpointing` (ms of pause that ends a turn; minimum 500, default 800; or `false`), `utterance_end_ms`, `vad_events`, `language`, `early_words` (Saidwire extension). - Other parameters are accepted and ignored with no error: `keyterm`, `keywords`, `diarize`, `redact`, `numerals`, `profanity_filter`, `multichannel`, `alternatives`, `search`, `replace`, `filler_words`, `model`, `callback` and more. Don't generate code that depends on them. Full list: https://saidwire.com/docs/api#ignored-parameters - Client messages: binary audio; `{"type": "KeepAlive"}` (a stream with no audio and no KeepAlive for 10 s is closed); `{"type": "Finalize"}` (final transcript right now, answered with a final `Results` that has `"from_finalize": true`); `{"type": "CloseStream"}` (flush, last final, `Metadata`, close 1000). - Server messages: `Results` (`is_final`, `speech_final`, `channel.alternatives[0].transcript`, `words[]` with `start`, `end`, `punctuated_word`), `UtteranceEnd`, `SpeechStarted` (with `vad_events=true`), `EarlyWord` (with `early_words=true`), `Metadata` (once, at the end), `Error` (then the socket closes). - `confidence` is a fixed 0.95, not a calibrated score. - Turn-taking: for the lowest latency, run your own voice-activity or turn detection and send `Finalize` when the user stops; the final transcript arrives a median 35 ms later (p95 46 ms), measured in US East, plus your network round trip. With silence endpointing alone, a final needs at least 500 ms of silence. - Files: up to 100 MB and 60 minutes per request, answered synchronously (no callbacks). WAV, MP3, FLAC, Ogg/Opus, WebM. Or JSON `{"url": "https://..."}` for a public file. - Limits per key (defaults): 4 concurrent streams on the free trial, 60 new streams per minute, 2 concurrent file requests, 4-hour maximum stream. HTTP 429 means retry after `Retry-After`. - Errors: 400 bad request or unsupported audio/language, 401 invalid key, 402 quota exceeded, 403 key revoked, 429 rate or concurrency limit, 503 temporary (retry after `Retry-After`). Every response has a `request_id` (header `x-request-id`). - Data: audio is processed in memory and never stored; transcripts are not logged; no training on customer data. ## Docs - [Quickstart](https://saidwire.com/docs): first transcript in Python, Node.js, curl and the OpenAI SDK; switching an existing client - [API reference](https://saidwire.com/docs/api): every parameter, message, error, limit and compatibility note - [Accepted but ignored parameters](https://saidwire.com/docs/api#ignored-parameters): parameters that are accepted but have no effect - [Integrations](https://saidwire.com/integrations): Pipecat (`pip install pipecat-saidwire`), LiveKit Agents (`pip install livekit-plugins-saidwire`), MCP server (`pip install saidwire-mcp`), Vercel AI SDK (`npm install @saidwire/ai-sdk-provider`), n8n (`n8n-nodes-saidwire`) ## Guides - [Open WebUI](https://saidwire.com/static/guides/open-webui.html) - [n8n](https://saidwire.com/static/guides/n8n.html) - [LiteLLM](https://saidwire.com/static/guides/litellm.html) - [Dify](https://saidwire.com/static/guides/dify.html) - [Flowise](https://saidwire.com/static/guides/flowise.html) - [Vercel AI SDK](https://saidwire.com/static/guides/vercel-ai-sdk.html) ## Service - [Pricing](https://saidwire.com/developers/pricing): $0.30 per audio hour, 120 free hours, no card, no deadline - [Status](https://saidwire.com/status): live check every 5 minutes, uptime, last 24 hours - [Security](https://saidwire.com/security): data handling, encryption, keys, hosting region, subprocessors - [Changelog](https://saidwire.com/changelog): dated API changes ## Optional - [Benchmarks](https://saidwire.com/benchmarks): our own 24-hour run of Coval's open-source benchmark method (912 clips): 35 ms median Finalize to final, 3.9% WER; not an independent ranking - [API terms](https://saidwire.com/legal/api-terms) - [API privacy notice](https://saidwire.com/legal/api-privacy) - Support: support@saidwire.com