Live speed test
Talk into your microphone. Each time you pause, a stopwatch shows how long the final transcript took.
Open the live speed test demoReal-time speech-to-text API
Saidwire turns live English speech into text for voice agents, phone lines and live captions. Wire-1 ranked 1st of 29 on time to final segment in Coval's independent STT benchmark (30-day window to Nov 9, 2026).
Source: Coval independent STT benchmark, 30-day, Nov 2026 (accent figures: accented-speech dataset). Window ends Nov 9, 2026; 2,857 samples; US-hosted endpoint. Add your network round trip.
No card, no deadline. $0.25 per audio hour after the trial. Works with the OpenAI SDK and any /v1/listen-compatible client.
is_final with punctuation, plus speech_final for end of turn: "I'd like to book a table for two."Schematic, not to scale. 34 ms median (p95 50 ms) to final transcript on Coval's STT benchmark (30-day window to Nov 9, 2026); add your network round trip.
Tools and protocols Saidwire works with, each linked to its setup guide. Not customers, partners or endorsements. All integrations
Highlights
Source: Coval independent STT benchmark, 30-day, Nov 2026 (accent figures: accented-speech dataset). Window ends Nov 9, 2026; 2,857 samples; US-hosted endpoint. Add your network round trip. Method and how to reproduce
Demos
Four ways to try Saidwire in under a minute: in your browser, on a phone call, or by listening.
Talk into your microphone. Each time you pause, a stopwatch shows how long the final transcript took.
Open the live speed test demoHave a short spoken conversation with an example agent that hears you through the Saidwire API.
Open the voice agent demoBook a pretend appointment with an AI receptionist for a fictional dental office. Try it in your browser now.
Open the phone receptionist demoPlay recorded clips and watch the transcript arrive exactly as the live API sent it.
Open the audio samples demoProduct
Send audio over a WebSocket. Get interim words while the person speaks, then a punctuated final and an end-of-turn signal.
Streaming APIPost a WAV, MP3, FLAC, Ogg or WebM file up to 60 minutes long and get the transcript back.
File transcriptionLive now: POST /v1/audio/transcriptions works with the official OpenAI SDKs. Change the base URL and the key.
Live now: already using a /v1/listen-compatible client? Change the base URL and the key. Your client code stays the same.
Switching guideFor developers
Open a WebSocket, send audio, read JSON. Or keep the client you have and point it at Saidwire.
Finalize when your voice detector says the user stopped, or let speech_final mark the pause.# Already using a /v1/listen-compatible client? Change two values.
- base URL wss://<your current endpoint>/v1/listen
+ base URL wss://api.saidwire.com/v1/listen
- API key <your current key>
+ API key sk_live_...
# Query parameters, Results messages, KeepAlive, Finalize and
# CloseStream keep the same names. Differences are listed in the docs.# pip install websockets (Python 3.10+)
import asyncio, json, os, wave
from websockets.asyncio.client import connect
URL = ("wss://api.saidwire.com/v1/listen?encoding=linear16&sample_rate=16000"
"&interim_results=true&punctuate=true&endpointing=500")
async def main(path):
with wave.open(path) as w: # 16 kHz, mono, 16-bit
pcm = w.readframes(w.getnframes())
headers = {"Authorization": f"Token {os.environ['SAIDWIRE_API_KEY']}"}
async with connect(URL, additional_headers=headers) as ws:
async def reader():
async for raw in ws:
m = json.loads(raw)
if m["type"] == "Results" and m["is_final"]:
print(m["channel"]["alternatives"][0]["transcript"])
r = asyncio.create_task(reader())
for i in range(0, len(pcm), 640): # 20 ms frames, real time
await ws.send(pcm[i:i + 640])
await asyncio.sleep(0.02)
await ws.send(json.dumps({"type": "CloseStream"}))
await r
asyncio.run(main("call.wav"))# pip install openai
import os
from openai import OpenAI
client = OpenAI(base_url="https://api.saidwire.com/v1", api_key=os.environ["SAIDWIRE_API_KEY"])
with open("meeting.mp3", "rb") as f:
r = client.audio.transcriptions.create(model="saidwire-en", file=f)
print(r.text)// npm install ws
const WebSocket = require("ws");
const ws = new WebSocket(
"wss://api.saidwire.com/v1/listen?encoding=linear16&sample_rate=16000&interim_results=true&punctuate=true",
{ headers: { Authorization: `Token ${process.env.SAIDWIRE_API_KEY}` } });
ws.on("message", (raw) => {
const m = JSON.parse(raw);
if (m.type === "Results")
console.log(m.is_final ? "final " : "interim", m.channel.alternatives[0].transcript);
});
ws.on("open", () => {
// send binary 16-bit PCM frames (20-100 ms each) as they are captured, then:
// ws.send(JSON.stringify({ type: "CloseStream" }));
});# Transcribe a recorded file (WAV, MP3, FLAC, Ogg or WebM, up to 60 min)
curl -s -X POST "https://api.saidwire.com/v1/listen?punctuate=true" \
-H "Authorization: Token $SAIDWIRE_API_KEY" \
-H "Content-Type: audio/wav" \
--data-binary @meeting.wav \
| jq -r '.results.channels[0].alternatives[0].transcript'Use cases
The final transcript lands 50 ms p95 after the end of speech (Coval, Nov 2026), so your agent can start its reply sooner. An end-of-turn signal comes with it.
Voice agents guideStream phone audio as it is: μ-law and A-law at 8 kHz, or linear PCM up to 48 kHz.
Phone bots guideUpload recordings in WAV, MP3, FLAC, Ogg or WebM, up to 60 minutes each, through our API or the OpenAI SDK.
Meeting notes guideTranscribe press conferences, hearings and other live broadcasts as they happen, over the same streaming API.
Read the docsInterim words appear while the speaker talks; finals correct and punctuate them a moment later.
Live captions guideTell us what you are building and what you need from speech-to-text. We reply from the engineering team.
Tell usPricing
$0.25 per audio hour. Start with 120 free hours: no card, no deadline, up to 4 streams.
Trust and security
Speech goes in, text comes out, and the audio is gone. Security or compliance questions go to support@saidwire.com.
Audio is processed in memory and never stored. Transcripts are not stored or logged.
The API is served only over HTTPS and secure WebSockets (WSS).
Saidwire keeps only a hash of each key, so a lost key is replaced, never recovered.
Every stream and request returns a request ID, so support can find it without your audio.
Read the API privacy notice and API terms.
FAQ
120 free audio hours with no card and no deadline, and up to 4 streams at once. Sign up in the dashboard and get a key in a minute.
Yes. The API is always on; there is no warm-up window.
Saidwire speaks the widely used /v1/listen streaming protocol. Change the base URL to wss://api.saidwire.com (or https:// for files) and use your Saidwire key. The compatibility notes list the few differences.
Yes, for whole files. Set the base URL to https://api.saidwire.com/v1 and call audio.transcriptions.create. See OpenAI-compatible transcription.
English only. Streaming takes linear PCM from 8 to 48 kHz and μ-law or A-law phone audio. Files can be WAV, MP3, FLAC, Ogg or WebM, up to 60 minutes.
50 ms p95 and 34 ms median to final transcript on Coval's independent STT benchmark (30-day window to Nov 9, 2026), ranked 1st of 29 on time to final segment; word error rate 3.8%. Add your network round trip. See Benchmark for the method.
Seconds of audio you send, from the first byte to the end of the stream, silence included.
No. Audio is processed in memory and never stored.
Yes. Tell us which datasets you used and we will link your results.
No card, no deadline, up to 4 streams. Keep your client and change the URL.
Services
For voice agents and live captions: stream audio over a WebSocket, get interim words while people speak and the final transcript when they stop.
Voice agentsFor recordings: send a file or a URL, or use the OpenAI SDK.
File transcriptionWhat's next
Plans, not promises. Dated changes go on the changelog.
About
Saidwire LLC, Kansas City, Missouri, founded in 2026 by Hudson Leach. We build real-time English speech-to-text for voice agents. Contact: hudsonleach@saidwire.com.