Transcriber

Use cases

Transcription APIs are everywhere. Keyless ones are not.

Most of these you could do with any speech-to-text service. The first one you could not — and it is the reason this exists.

Agents

An agent that hits an audio file mid-task

A research agent following a citation trail lands on a conference talk. It cannot pause to create an account, verify an email, and store a key. It quotes the file, signs a payment, and gets the words — inside one tool call.

POST /api/x402/transcribe · no key · USDC on Base

Podcasting

Show notes and captions from one run

Submit the episode, take the SRT into the edit and the summary into the description. Timestamps come back as numbers, so chapter marks are arithmetic rather than parsing.

A 62-minute episode: 186 credits

Calls

Sales calls and user interviews

Turn an hour of recording into text you can search, quote, and paste into a CRM. Add a summary and the decisions surface without replaying anything.

Uploads stay private and are deleted with the job

Archives

A backlog of recordings, made searchable

Years of standups, lectures, or support calls. Per-minute billing means a backlog costs exactly what it is long — no plan to size, no ceiling to hit.

Up to 4 hours per file, 5 jobs running at once

Accessibility

Captions for everything you already published

A VTT file per video, generated from the media you have. Cues are built from word timings and broken at sentence ends, so they read the way a person reads.

GET /api/jobs/<id>/export?format=vtt — free

Pipelines

One POST, one poll

No SDK, no websocket, no callback to host. Polling is free and it advances the job, so a tight loop finishes sooner rather than costing more.

REST and MCP both draw the same credits

The keyless path

What an agent actually does

Two requests. The first comes back with a price computed from that specific file's length; the second carries a signed authorization and returns the transcript. Nothing is stored about the caller, because there is nothing to store.

Payment is verified before the audio is read and settled only once the words exist — so a file that turns out to be silence is refused, not billed.

# an agent with a wallet and no account
r = POST /api/x402/transcribe {"url": "…/talk.mp3"}
# → 402  { accepts: [{ maxAmountRequired, payTo, asset, … }] }

sign(r.accepts[0]) → X-Payment
r2 = POST /api/x402/transcribe  (same body, + X-Payment)
# → 200  { transcript: { text, segments, duration_sec }, … }