Built for voice agents that can't wait 600ms

Published by AllModels

One API for real-time speech-to-text providers

Transcribe with STT models from multiple providers through AllModels. Stream audio over WebSocket, use an OpenAI- or ElevenLabs-compatible SDK, and switch models without rebuilding your transcription pipeline.

AllModels is an independent service and is not affiliated with, endorsed by, or sponsored by the providers whose models it routes to.

What a unified speech-to-text API is

A unified speech-to-text (STT) API is a single integration that can transcribe audio with models from many different providers. Instead of writing one client for Deepgram, another for AssemblyAI, another for Soniox and another for OpenAI, your application talks to one endpoint with one API key. The model you choose decides which provider transcribes the audio. AllModels is a unified STT API of this kind: you send a model ID such as deepgram/nova-3, assemblyai/universal-3-5-pro-realtime or soniox/stt-rt-v5, and AllModels routes the audio to that provider and returns the transcript.

How AllModels works

Every model in the AllModels STT catalogue has a provider/model ID. You authenticate once with an AllModels API key, which replaces the separate keys and billing accounts you would otherwise keep with each provider. AllModels then offers three ways to call the same models:

  • Native WebSocket at wss://api.allmodels.io/v1/stt. You send raw audio frames as they are captured and receive stt.transcript.partial and stt.transcript.final events in one normalized format, whichever provider is behind the model.
  • OpenAI-compatible at https://api.allmodels.io/oai. Point the official OpenAI SDK at this base URL and keep calling audio.transcriptions.create for files, or its realtime client for live audio.
  • ElevenLabs-compatible at https://api.allmodels.io/el. Point the official ElevenLabs SDK at this base URL and keep calling its speech-to-text methods, including realtime transcription.

All three reach the same catalogue. If your codebase already uses the OpenAI or ElevenLabs SDK, you can move to AllModels by changing the base URL and API key.

Live audio and complete files

For microphones, calls and voice agents, stream audio over a WebSocket and read partial transcripts while the speaker is still talking. When the complete recording already exists, upload it in one HTTP request and get the full transcript back. To use a different STT model, change the model ID; your API key, endpoint and client code stay the same.

Transcribe real-time audio from any client

Choose a client, a mode and a language. Highlighted lines are the AllModels base URL and the model values you change to try another model.

Client
Mode
Language

Native WebSocket, streaming JavaScript · Node.js · ws

Connect to wss://api.allmodels.io/v1/stt, send 16 kHz PCM audio as binary frames and read partial and final transcripts. STT docs.

import { readFile } from "node:fs/promises";
import WebSocket from "ws";

const url = new URL("wss://api.allmodels.io/v1/stt");
url.searchParams.set("model", "deepgram/nova-3");
url.searchParams.set("audio_format", "pcm_16000");
url.searchParams.set("language", "en");
url.searchParams.set("commit_strategy", "manual");

const ws = new WebSocket(url, {
  headers: { Authorization: `Bearer ${process.env.ALLMODELS_API_KEY}` }
});

ws.on("message", (data) => {
  const event = JSON.parse(data.toString());
  if (event.type === "stt.transcript.partial") console.log("partial:", event.text);
  if (event.type === "stt.transcript.final") {
    console.log("final:", event.text);
    ws.send(JSON.stringify({ type: "stt.session.close" }));
  }
});

ws.on("open", async () => {
  const audio = await readFile("speech-16khz.pcm");
  for (let offset = 0; offset < audio.length; offset += 3200) {
    ws.send(audio.subarray(offset, offset + 3200));
  }
  ws.send(JSON.stringify({ type: "stt.audio.commit" }));
});

Compatible interfaces

Use the client your team already knows

https://api.allmodels.io/oai

OpenAI-compatible

Already using the OpenAI SDK? Set its base URL to AllModels and keep calling audio.transcriptions.create or the realtime client, now with an AllModels model ID.

Read the OpenAI transcription docs

https://api.allmodels.io/el

ElevenLabs-compatible

Already using the ElevenLabs SDK? Set its base URL to AllModels and keep using its convert and realtime speech-to-text methods, now with an AllModels model ID.

Read the ElevenLabs transcription docs

Quick answers

Real-time STT API basics

What is a unified speech-to-text API?

A unified STT API gives applications one integration surface for multiple transcription models. With AllModels, the chosen model ID determines the provider while authentication and the core request flow stay the same.

Does AllModels support real-time transcription?

Yes. The native interface streams over WebSocket at /v1/stt and returns partial and final transcripts as normalized stt.* events. The OpenAI and ElevenLabs SDKs stream through their own realtime clients. Streaming support varies by model.

Can I use every provider feature?

Yes. Common settings use the standard fields, and any provider-specific setting, such as diarization settings, goes in provider_options and is passed directly to the provider.

How do I compare providers?

Browse the STT catalogue to compare available models, streaming support, pricing and API examples before changing the model ID in your application.

One integration in three steps
  1. 1
    Choose a model. Pick an STT model from the live catalogue by its provider/model ID.
  2. 2
    Use one API key. Authenticate with AllModels instead of a separate key for every provider.
  3. 3
    Stream or upload. Stream audio over WebSocket for live transcripts, or upload a complete file over HTTP.

Build with AllModels

Start with one STT integration.

Choose a model now and keep the freedom to change it later.