OpenTranscription
OpenTranscription
RankerModelsPlayground
OpenTranscription
OpenTranscription

One API to every speech-to-text model worth using. Compare them on your audio, route to the best one, pay per second.

Platform status

Product

RankerModelsTranscriptionsPlaygroundBlog

Developers

DocumentationReliabilityAPI VersioningStatus

Legal

Privacy PolicyTerms of ServiceSupport
© 2026 OpenTranscription
Back to Models$0.0101/min

Gladia Solaria-3

Gladia

Batch

Gladia Solaria-3 — EU-hosted batch speech-to-text tuned for the most accurate business audio across five core European languages (English, French, German, Spanish, Italian), with speaker diarization, custom vocabulary, and word-level timestamps.

Transcribe with this modelCompare in playground

5 languages · benchmarked

Overall Score

52.2

#3 of 35

Word Error Rate

9.80%

Character Error Rate

5.76%

Match Error Rate

9.63%

Word Info Lost

14.69%

Avg Latency

7.6s

Benchmarks Run

20

Benchmark trend

last 30 runs

Word error rate

9.80%

↓ 16.4% · 30d

3 runs ago

latest

Avg latency

7.6s

↑ 0.4% · 30d

3 runs ago

latest

Cost vs. accuracy

overall WER · 35 models

Gladia Solaria-3

field · 34 models

lower-left is better

Performance by category

6 categories

WER

lower is better

Legal

2.9%

Conversational

7.0%

Medical

8.9%

General

9.0%

Finance

9.5%

Code-Switching

24.8%

CategoryWERCERMERWILLatencyBenchmarks

Code-Switching

24.75%
16.63%
24.23%
35.89%

7.9s

2

Conversational

6.97%
4.25%
6.77%
9.09%

7.8s

2

Finance

9.54%
5.96%
9.13%
13.93%

7.7s

2

General

9.00%
5.05%
8.99%
14.57%

7.6s

10

Legal

2.87%
1.54%
2.84%
3.55%

7.6s

2

Medical

8.90%
3.96%
8.37%
11.58%

7.4s

2

Performance by accent

5 accents

AccentWERBenchmarks

African

24.62%

1

Australian

13.85%

1

Indian

25.40%

1

British

7.46%

1

American

13.21%

1

Pricing

pay per second

Rate

$0.0101

/min

Per-second billing. Bring your own provider key and pay your provider directly — a 5% routing fee applies (first 100 min/mo free).

Set up BYOK

Cost estimator

1 hour

$0.61

10 hours

$6.08

100 hours

$60.84

1,000 hours

$608.40

Billed per second of audio processed.

API & usage

POST /api/v1/transcriptions

Model ID

gladia/solaria-3

Get an API key

Authenticate every request with your secret API key as a Bearer token. Issue a key from your dashboard.

Use it with your agent

Paste this into Claude Code, Cursor, Codex or any agent with a shell. It installs the CLI and the OpenTranscription skill, then transcribes with this model.

Transcribe an audio file for me with OpenTranscription, using the model gladia/solaria-3.
Set it up first:
npm install -g @opentranscription/cli
ot login
npx skills add opentranscription/skills
Then run:
ot transcribe <my-file> --model gladia/solaria-3
Ask me one question at a time, and give me options to pick from rather than open questions. Look for audio files here before asking which one I mean. Leave the language alone unless I tell you what it is, since the model detects it.
This model can also label speakers with --diarize, and take a vocabulary of names and jargon with --vocab "Kubernetes,Sanjay". Offer those one at a time, and only if I have not already said.
The login step opens my browser and waits for me to approve it, so stop and tell me when you reach it. The skill covers the rest.
Agent SkillTypeScript SDKPython SDKCLI on npm

Quickstart

Upload your audio, create a job with this model, then poll the job or set a webhook_url to be notified when it completes.

// npm install @opentranscription/sdk
import { readFile } from 'node:fs/promises';
import { OpenTranscription } from '@opentranscription/sdk';
const ot = new OpenTranscription({ apiKey: process.env.OT_API_KEY! });
// Uploads the audio and opens the job. The signed-URL round trip is inside.
const job = await ot.transcribe({
file: await readFile('interview.mp3'),
fileName: 'interview.mp3',
model: 'gladia/solaria-3',
language: 'en',
diarization: true,
customWords: ['Kubernetes', 'Grafana', 'Sanjay Bhattacharya'],
webhookUrl: 'https://your-app.com/webhooks/ot',
});
// We POST a signed event to that URL when the job finishes: no polling required.

Key parameters

file_path

string

required

Storage path returned by the upload step.

model

string

required

The model to run this job on.

models

string[]

Ordered fallback chain: primary first, then backups tried in order if a provider fails.

language

string

ISO 639-1 language code. Omit to auto-detect.

diarization

boolean

Label speakers (A, B, …) in the output.

custom_words

string[]

Names, jargon and product terms to bias the model toward. Up to 1000 entries.

vocabulary_list_id

uuid

A vocabulary list saved in your workspace. Merged with custom_words when both are sent.

webhook_url

string

HTTPS URL notified with the result when the job completes. Delivered events are signed (X-OT-Signature).

title

string

Display name for this job in the dashboard. Falls back to the file name.

Response

A completed job returns the transcript in the OpenTranscription Unified Schema (OTUS).

{
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"status": "completed",
"transcript": {
"text": "Welcome to the meeting, everyone.",
"language": "en",
"confidence": 0.97,
"segments": [
{
"id": 0,
"start": 0,
"end": 3.5,
"text": "Welcome to the meeting, everyone.",
"speaker": "A"
}
],
"words": [
{
"word": "Welcome",
"start": 0,
"end": 0.42,
"confidence": 0.99
}
]
}
}

Webhooks — skip polling

We POST a signed event to your webhook_url when a job completes or fails; verify the X-OT-Signature (HMAC-SHA256, reject if older than 300 s) and dedupe on the event id, then fetch the full transcript via GET /api/v1/transcriptions/{id}.

import { createHmac, timingSafeEqual } from "node:crypto";
// Your signing secret from Settings → API keys.
const SECRET = process.env.OT_WEBHOOK_SECRET ?? "";
function verify(
rawBody: string,
header: string,
nowSeconds = Math.floor(Date.now() / 1000),
): boolean {
const segments = header.split(",");
// Exactly one t= segment, finite, within the replay window.
const tValues = segments.filter((s) => s.startsWith("t=")).map((s) => s.slice(2));
if (tValues.length !== 1) return false;
const t = Number(tValues[0]);
if (!Number.isFinite(t) || Math.abs(nowSeconds - t) > 300) return false;
const expected = createHmac("sha256", SECRET)
.update(`${t}.${rawBody}`)
.digest("hex");
// Header may carry multiple v1 sigs (key rotation). Match any.
return segments
.filter((s) => s.startsWith("v1="))
.some((s) => {
const got = Buffer.from(s.slice(3), "hex");
const exp = Buffer.from(expected, "hex");
return got.length === exp.length && timingSafeEqual(got, exp);
});
}
// Express example. Use the RAW body buffer, not the parsed JSON.
// The X-OT-Signature header carries t=<unix>,v1=<hmac-hex>.
app.post("/webhooks/ot", express.raw({ type: "application/json" }), (req, res) => {
const sig = req.headers["x-ot-signature"] as string;
if (!verify(req.body.toString(), sig)) {
return res.sendStatus(400);
}
const event = JSON.parse(req.body.toString());
// Dedupe on event.id (at-least-once delivery), then enqueue + return 2xx fast.
res.sendStatus(200);
});
Get your signing secret

Rate-limited per tier — see the X-RateLimit-* response headers.

Full API reference

Reliability

rolling 30 days

Uptime · 30d

100.00%

Error rate

0.00%

Avg latency

70.4s

Last incident

None in 30d

Similar models

from the same field

More accurate

Soniox STT (Async)

Soniox

8.73% WER

$0.0017/min

Compare →

Cheaper

Whisper Large V3 Turbo

Groq

14.31% WER

$0.0007/min

Compare →

Supported Languages

EnglishFrenchGermanSpanishItalian

Supported Formats

mp3wavflacm4aoggwebmaac

Features

Auto-detectDiarizationWord Timestamps+1

Limits

Max file size

1000 MB

Max duration

2 h 15 min

About Gladia Solaria-3

Gladia Solaria-3 is a speech-to-text model from Gladia. In our standardized benchmarks it reaches 9.80% word error rate, ranking #3 of 35 models tested. It supports 5 languages and runs at $0.01/min — a premium option.

Its nearest benchmarked alternative is Soniox STT (Async). Best suited for multi-speaker conversations, accuracy-critical work, and legal transcription.