Speech to text API
Send an audio file, get the transcript, subtitles (SRT or VTT) and word timings back. Up to an hour of audio for $0.05; OpenAI- and ElevenLabs-compatible.
- Whisper large-v3-turbo in 90+ languages, language detected or named
- Subtitles as SRT or WebVTT, and timed segments and words, in the same call
- Short clips in any common format up to 5 MB for $0.01; up to 60 minutes of MP3 or WAV (25 MB) for $0.05 with transcribe/long
- Drop-in for existing code: POST /v1/audio/transcriptions (OpenAI shape) and POST /v1/speech-to-text (ElevenLabs shape)
- Uploaded audio is held in memory for the one request and not stored; a file that cannot be read is never charged
No account to create. Failed calls are never charged.
One request
curl -H "Authorization: Bearer $API_KEY" \
"https://agent-data-tools.revmesh2074.workers.dev/transcribe?url=https%3A%2F%2Fcommons.wikimedia.org%2Fwiki%2FSpecial%3AFilePath%2FEn-us-hello.ogg"
Python
import os, requests
r = requests.get(
"https://agent-data-tools.revmesh2074.workers.dev/transcribe",
params={
"url": "https://commons.wikimedia.org/wiki/Special:FilePath/En-us-hello.ogg",
},
headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
timeout=60,
)
r.raise_for_status()
print(r.json())
Node.js
const params = new URLSearchParams({
url: "https://commons.wikimedia.org/wiki/Special:FilePath/En-us-hello.ogg",
});
const r = await fetch(`https://agent-data-tools.revmesh2074.workers.dev/transcribe?${params}`, {
headers: { Authorization: `Bearer ${process.env.API_KEY}` },
});
if (!r.ok) throw new Error(await r.text());
console.log(await r.json());
Send a file instead of a URL
curl -H "Authorization: Bearer $API_KEY" \
-F "file=@report.pdf" -F "pages=5" \
"https://agent-data-tools.revmesh2074.workers.dev/transcribe"
Or the raw file as the body: --data-binary @report.pdf -H "Content-Type: application/pdf". Up to 10 MB. The file is read in memory for this one request and not stored.
The answer
{
"url": "https://commons.wikimedia.org/wiki/Special:FilePath/En-us-hello.ogg",
"text": "Hello!",
"language": "en",
"durationSeconds": 0.487625,
"wordCount": 1,
"model": "@cf/openai/whisper-large-v3-turbo"
}
Pricing
One API key, paid by card through Stripe. $0.01 per successful call with a key; failed calls cost nothing.
A plan adds its credits each month when the payment succeeds; unused credits stay, and you can cancel at any time. Packs never expire. After paying you get your key on the next page. The same key works on every tool in the catalog. Details: credits and plans.
Inputs
| Name | Type | Description |
|---|---|---|
url (required) | string | Absolute http(s) URL of an audio file (max 5 MB); or POST the file itself (raw body, multipart `file` part, or base64 in JSON) |
subtitles | string | srt or vtt: also return subtitle text |
timestamps | string | true: also return timed segments and words |
language | string | Spoken language code such as en, sv or de (default: detected) |
What it does not do
- One speaker track: no speaker labels (diarization) yet.
- Files over 5 MB must be MP3 or WAV; other formats (M4A, OGG, WebM) work up to 5 MB.
- Machine transcription: names and rare words can be wrong. Check what matters.
Also on the same key
- Transcribe long audio: up to 60 minutes of MP3 or WAV, with subtitles · $0.05 a call
- Summarize text: shorten long text into a few sentences and key points · $0.01 a call
- Translate text, translation API: translate text into another language, about 100 languages · $0.01 a call
Questions
How long can a recording be?
Up to 60 minutes and 25 MB of MP3 or WAV in one call to /transcribe/long ($0.05). The file is cut into parts and the timings are joined, so subtitles cover the whole recording. Clips up to 5 MB in any common format go to /transcribe ($0.01).
Can I keep my OpenAI or ElevenLabs code?
Yes. Point the client's base URL here: POST /v1/audio/transcriptions takes OpenAI's request (file, language, response_format json, text, srt, vtt or verbose_json), and POST /v1/speech-to-text takes ElevenLabs' (file or cloud_storage_url, language_code). A prepaid key goes in Authorization: Bearer, X-API-Key or xi-api-key.
Which languages?
The 90+ languages Whisper large-v3-turbo knows, Swedish, German, Spanish and French among them. Send language=sv to skip detection.
Are my files stored?
No. A file sent in a request is held in memory for that request only. It is not stored, cached or logged.
Is there a subscription?
There is a monthly plan and there are one-off credit packs. Both give one API key; a plan adds credits each month and unused credits stay.
Guides
For AI agents
The same tool is on the MCP server https://agent-data-tools.revmesh2074.workers.dev/mcp (the first 25 successful calls are free), and an agent with a wallet can pay per call in USDC: the tool URL answers 402 Payment Required with x402 and MPP terms. Reference: tool page · OpenAPI · docs for agents.