> ## Documentation Index
> Fetch the complete documentation index at: https://docs.orbit.devotel.io/llms.txt
> Use this file to discover all available pages before exploring further.

# STT Playground: compare speech-to-text vendors

> Mic-record or upload a short clip, then compare every catalogued STT vendor's transcript, confidence, and latency side by side in the dashboard before you wire one into an agent.

# STT Playground

Picking a speech-to-text vendor for a voice agent is a transcription-quality
decision, and it is hard to make blind. The **STT Playground** lets you try a
short clip against every speech-to-text vendor Orbit recognises — from the
dashboard, with no API integration — and read each vendor's transcript,
confidence, and latency side by side before you commit one to an agent.

Open it under **Voice → STT Playground** in the dashboard. It is gated to the
`owner`, `admin`, and `developer` roles because each comparison run invokes
metered upstream transcription calls.

## What it compares

Each run sends your clip to every catalogued STT vendor independently and
returns one row per vendor:

| Field          | What it tells you                                                                                                              |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **Transcript** | The text the vendor produced for your clip — compare word-for-word accuracy directly.                                          |
| **Confidence** | The vendor's own score for the run, shown as a percentage. Higher is better, but read it against the transcript itself.        |
| **Latency**    | End-to-end response time in milliseconds for that run — the gap between vendors on the same clip is the meaningful comparison. |
| **Status**     | `Available` when the vendor is provisioned on your account; `Not yet available` otherwise.                                     |

Vendors are compared in parallel. If one vendor fails — bad credentials, an
upstream outage — it gets its own error row and the rest of the comparison
still comes back. One bad vendor never sinks the run.

## Honest availability

Today, **Deepgram** is the vendor with a provisioned batch transcription path.
The other catalogued vendors — **Soniox, Speechmatics, AssemblyAI, and xAI** — are
recognised by Orbit and appear in the comparison, but are not yet provisioned.
They show as **"Not yet available"** rather than a fabricated result.

That honesty is deliberate: the playground shows you the same availability the
per-agent STT picker sees, so the comparison never promises a vendor you cannot
actually wire. A vendor's status flips to `Available` on its own once its
upstream credentials are provisioned.

## Record or upload

Two ways to get a clip in — both feed the same comparison:

* **Record from your microphone.** Use the mic button on the page; speak the
  kind of prompt a caller would actually say (numbers, names, accents,
  background noise — whatever your agents will face).
* **Upload a clip.** Accepted formats are MP3, WAV, OGG, AAC, and M4A, up to
  **25 MB**. Keep clips short and representative: one prompt, not a whole call.

Once a clip is in, you get an inline audio player to check it, then **Compare
providers** to run the comparison. Discard the clip to start over.

### Upload contract

The page calls a single endpoint, and the same contract applies if you script
your own comparison:

`POST /api/v1/voice/stt-preview`

* `multipart/form-data` with one `file` field holding the audio clip.
* Optional `vendors` form field: a comma-separated list of vendor ids to
  restrict the run (for example `deepgram`). Omit it to compare every
  catalogued vendor.
* Auth: an API key or session token with the `voice:write` scope, on an
  `owner`, `admin`, or `developer` role.
* Response: `{ results: [{ vendor, label, provisioned, transcript?,
  confidence?, latency_ms?, error? }] }` — one entry per vendor compared.

Errors are specific: `415` when the upload is not multipart or not an accepted
audio type, `422` when no file (or an empty file) was provided, and `413` when
the clip exceeds the 25 MB limit.

<Note>
  Clips are sent only to the catalogued STT vendors for transcription quality
  comparison. They are never used to originate any call and never touch a PSTN
  leg.
</Note>

## Reading the comparison

Read the three numbers together rather than picking the highest single score:

1. **Transcript first.** A vendor with a slightly lower confidence score but a
   word-perfect transcript on your real audio beats a confident-but-wrong one.
   Run the same clip you expect in production — proper nouns, numbers, and
   noisy callers are where vendors diverge.
2. **Confidence as a tiebreaker.** Transcript-equal vendors: prefer the higher
   self-reported confidence.
3. **Latency for the live path.** For real-time agents, the latency delta
   between vendors on the same clip is what a caller will feel. For batch or
   post-call transcription it barely matters.

Re-run with the `vendors` field narrowed to a shortlist once you are converging
— uploads are cheap, and per-vendor numbers from one run are not directly
comparable to another run because each run measures the vendor fresh.

## Ephemeral by design

Nothing you upload is stored. The clip lives only for the duration of the
comparison request and is discarded the moment every vendor responds server-
side; on the client, the browser discards the clip when you replace it,
discard it, or navigate away. The comparison is recorded in your account's
audit log as metadata (filename, size, vendors compared) — never the audio.

## Before you wire an agent

The vendor you pick here becomes the one your agent's transcription depends
on. Use the playground as the last gate before you set it:

1. Compare your real audio — greetings, IVR prompts, the phrases your callers
   say.
2. Shortlist on transcript accuracy, then confidence, then latency.
3. Pick the winner in the agent's STT settings.

The same catalogue powers both, so a vendor that is `Available` here is
wireable in the agent config today, and a `Not yet available` vendor there is
just as unavailable here.

## The TTS analogue

The text-to-speech counterpart already exists: a listen-back preview on the
same authoring surfaces that lets you hear a voice before assigning it (`POST
/api/v1/voice/tts-preview` behind the dashboard's voice pickers). Use both
together — audition the TTS voice, and benchmark the STT vendor — so the agent
you wire sounds right and hears right on the first call.

## See also

* [IVR routing with NLU](/guides/ivr-routing-nlu) — speech intents run on the
  transcription layer you are choosing here.
* [Voice queues](/guides/voice-queues) — routing callers to agents once the
  audio pipeline is tuned.
