SaidwireDevelopers

Speech-to-text API

Fast finals for live English speech.

Stream audio over a WebSocket or send a file. Interim words while the person speaks; the final transcript 35 ms median (p95 46 ms) after Finalize, measured in US East. Add your network round trip.

120 free hours with no card and no deadline, up to 4 streams. Then $0.30 per audio hour. Always on.

# 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"))
wss://api.saidwire.com/v1/listenAPI reference
35msmedian final transcript after Finalize, measured in US East
46ms95th percentile, same measurement; add your network round trip
3.9%word error rate on the same 912-clip run
$0.30per audio hour, after 120 free hours

Final transcript 35 ms median (p95 46 ms) after Finalize, measured in US East; add your network round trip. Word error rate 3.9%. From a 24-hour run of Coval's open-source benchmark method against our public API: 912 clips, 0 failures. Our own run, not an independent ranking. How we measured

What you get

Everything a live speech pipeline needs.

Interim words, then finals

Interim results replace each other while the person speaks. Finals carry case, punctuation and word timings, and never change.

End of turn

Send Finalize when your own detector says the user stopped and get the final right away, or let speech_final mark the pause.

Phone and web audio

Linear PCM from 8 to 48 kHz, μ-law and A-law telephone audio, or a WAV stream. One channel per stream.

Files

POST /v1/listen with WAV, MP3, FLAC, Ogg, WebM or M4A up to 60 minutes.

OpenAI-compatible, live now

POST /v1/audio/transcriptions works with the official OpenAI SDKs and the tools built on them.

Deepgram API-compatible, live now

Same query parameters, message types and control messages. Change the base URL and the key.

Measured

Results by audio type

From our 24-hour run of Coval's open-source benchmark method against the public API: 912 clips, 0 failures. Our own run, not an independent ranking.

Method and limits

AudioClipsFinal, mean msWER
Mixed benchmark set480343.1%
Clean speech192353.9%
Accented speech48303.5%
Phone audio48374.7%
Far-field microphone48374.8%
Noise and gaps48395.2%
Clipped audio48379.4%
All912343.9%

Trust and security

Your audio is not kept.

Speech goes in, text comes out, and the audio is gone. Security or compliance questions go to support@saidwire.com.

Audio processed in memory

Audio is processed in memory and never stored. Transcripts are not stored or logged.

Encrypted connections

The API is served only over HTTPS and secure WebSockets (WSS).

Keys you control

Saidwire keeps only a hash of each key, so a lost key is replaced, never recovered.

A request ID on every request

Every stream and request returns a request ID, so support can find it without your audio.

Read the API privacy notice and API terms.

Talk to us

Volume, setup help or a custom plan

To get a key now, sign up in the dashboard: 120 free hours, no card. For volume pricing or help moving an existing integration, tell us what you're building. One reply from a person, no sequence.

Or email support@saidwire.com.

FAQ

Developer questions

What do I get on the free trial?

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.

Is the API always on?

Yes. The API is always on; there is no warm-up window.

How do I switch from a Deepgram-compatible integration?

Saidwire is compatible with Deepgram's API. 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.

Can I use the OpenAI SDK?

Yes, for whole files. Set the base URL to https://api.saidwire.com/v1 and call audio.transcriptions.create. See OpenAI-compatible transcription.

Which languages and audio formats do you support?

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, WebM or M4A, up to 60 minutes.

How fast is it?

Final transcript 35 ms median (p95 46 ms) after Finalize, measured in US East; add your network round trip. Word error rate 3.9% on the same 912-clip run. See Benchmarks for the method, and measure it on your own audio with the free hours.

How is usage counted?

Seconds of audio you send, from the first byte to the end of the stream, silence included.

Do you store my audio?

No. Audio is processed in memory and never stored.

Can I benchmark you and publish the results?

Yes. Tell us which datasets you used and we will link your results.