Transcriber

Audio in · timestamped text out

Sound becomes text.
With the clock attached.

Point it at an audio or video file and get back the words, every one of them stamped with when it was said — as SRT, VTT, plain text or JSON. Priced by the minute at 3 credits, refunded down to the minutes there actually were.

No subscription — pay in Ounie creditsKeyless x402 for agents
transcribing
00:00:00.00
[00:00:00.000]en

4 hours
the longest single file
8 formats in
mp3, wav, m4a, mp4, mov, webm, ogg, flac
4 formats out
srt, vtt, txt, json — all free

The pipeline

Five steps, and you are only charged for the fourth.

Everything before the transcription exists so the price is right, and everything after it exists so you get the difference back.

chunk 1chunk 2chunk 300:00:00.0001:12:04.86one timeline0102030405
01

Read the header

Two ranged requests pull the container's metadata to find the real length. That is the number you are quoted.

02

Hold the credits

Reserved up front on that length, never on a cap. Nothing is spent yet.

03

Split if needed

Over 22 MB the audio is cut on frame boundaries with a three-second overlap, so no word falls in a gap.

04

Transcribe

Each piece is transcribed with word-level timings, then stitched back onto one timeline.

05

Settle the difference

Billed on the length actually transcribed. The rest goes straight back to your wallet.

Exports

One transcript. Whatever file you actually needed.

Subtitles, plain text, or structured JSON — all four are the same words with the same timings, serialized differently. Exporting is free, and it stays free however many times you come back for a different one.

.srt
Premiere, Resolve, YouTube
Numbered cues, comma milliseconds.
.vtt
The web, <track> elements
WEBVTT header, dot milliseconds.
.txt
Reading and pasting
One timestamped line per cue.
.json
Anything programmatic
Segments with start, end, text.
transcript1 cue · 00:00:04.12 → 00:00:06.90.srt100:00:04,120--> 00:00:06,900we can ship it.vttWEBVTT00:00:04.120--> 00:00:06.900we can ship it.json{"start": 4.12,"end": 6.9,"text": "we can…"}same words · same timings · 0 creditsGET /api/jobs/<id>/export?format=srt

For developers & AI agents

Three ways in. One of them needs no account at all.

Transcription APIs are everywhere. Keyless ones are not — and an agent mid-task cannot go and sign up for something.

REST

credits

The same endpoints the dashboard uses. A Bearer key spends its owner's Ounie credits and is refused — never overdrawn — when the wallet is short.

curl -X POST https://transcribe.ounie.com/api/jobs \
  -H "Authorization: Bearer trx_live_…" \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/ep-104.mp3","summarize":true}'

# → 202 { "job": { "id": "…", "status": "queued" } }
# poll GET /api/jobs/<id> — free, and it advances the job

MCP

credits

Works with Claude, Cursor, ChatGPT and the Ounie AI Team. The?api_key=fallback exists for hosts that cannot set a header.

Endpoint  https://transcribe.ounie.com/api/mcp
Header    Authorization: Bearer trx_live_…   (or ounie_live_…)

# hosts that cannot set headers put the key in the URL:
https://transcribe.ounie.com/api/mcp?api_key=trx_live_…

tools  transcribe_media · get_transcript · estimate_cost
       list_transcripts · get_credit_balance · get_pricing

x402

no account

Pay per call in USDC on Base. The 402 quotes the exact price for that file's length, and payment is only settled once a transcript exists.

curl -X POST https://transcribe.ounie.com/api/x402/transcribe \
  -H "Content-Type: application/json" \
  -d '{"url":"https://example.com/clip.mp3"}'

# → 402 with the exact price for THIS file's length.
# sign it, retry with X-Payment, and the transcript comes back.
# no account, no key, USDC on Base.
Full API docs

Credit safety is server-side: a reserve that cannot be met returns 402 with a buy-credits link. An agent can never overdraw the wallet it is spending.

Credit math

3 credits a minute, and only for the minutes there were.

A credit is one cent. The hold is sized from the file's own header before anything runs; the charge is sized from what was actually transcribed. You keep the difference — automatically, without asking.

HELD AT SUBMIT40 min × 3 = 120 crCHARGED ON DELIVERY31 min × 3 = 93 cr27 cr returnedyour wallet
3 cr
per minute

Rounded up, per job — not per chunk. A 61-minute file is 61 minutes even when it is split four ways.

+1 cr
per minute, with a summary

Optional. A summary that fails never fails the transcript you paid for.

0 cr
to read it again

Every export, every re-read, every format. Silent or failed media refunds in full.

Who reaches for this

Anything where the words matter more than the sound.

Agents mid-task

A research agent hits a podcast episode and needs its contents. No signup, no key — a 402, a signature, and the text.

Podcast and video teams

Show notes, chapter marks, and burned-in captions from the same run. SRT straight into the edit.

Calls and interviews

Sales calls, user research, standups. Add a summary and get the decisions without replaying the hour.

Archives

Years of recordings become searchable text. Bill by the minute, so a backlog costs exactly what it is long.

Accessibility

VTT for every video on the site, generated from the file you already have.

Pipelines

One POST, one poll. Timestamps arrive as numbers, not strings to parse.

Questions

The things worth knowing first.

What can it transcribe?
Audio and video: mp3, wav, m4a, mp4, mov, webm, ogg, flac, aac. Give it a public URL or upload the file. Video is fine — only the audio track is read.
Do you label who is speaking?
No, and the option is deliberately absent rather than present-and-ineffective. The transcription rail does not return speaker labels, and inferring them from the wording afterwards would be a guess dressed up as a measurement. If your work depends on speaker separation, this is not the right tool yet.
How long can a file be?
Up to four hours per job. Anything over 22 MB is split on frame boundaries with a three-second overlap and stitched back onto one timeline, so the timestamps stay true across the joins. Files that large must be MP3 or WAV — those are the two containers that can be split without re-encoding, and we would rather refuse up front than hand back a broken transcript.
What happens if the length is wrong?
The hold is sized from the file's own container header. When a file does not declare its length we hold an estimate and say so. Either way the charge is based on what was actually transcribed, and the remainder is returned. If the estimate was too low, the extra is absorbed — you are never billed above what was held.
What if there is no speech?
It refunds in full and writes nothing to your ledger. Silence, a corrupt file, or a URL that served an error page are failures, not cheap transcriptions.
Is there a subscription?
No. It draws Ounie credits — one credit is one cent — from the same wallet every Ounie app shares. Nothing recurring, no plan to pick, no minimum.
Can an agent use it without an account?
Yes. POST /api/x402/transcribe answers 402 with the exact price for that file, and a signed retry returns the transcript. Payment is verified before the work and settled only after a transcript exists — so a file that turns out to be silent costs nothing.
Who can read my recordings?
Uploads are stored privately, at unguessable paths, and are read only by the server running your job. Deleting a job deletes the stored file with it. Nothing you upload is ever public.

Give it a file. Get the words back.

3 credits a minute, refunded down to the real length. Nothing to cancel.