API
One upload, one id, five formats. Keys for people, x402 for agents, and the same thing from a terminal or an MCP client.
Upload
curl -F file=@interview.m4a -F language=auto \ -H "Authorization: Bearer $TYPEHEARD_API_KEY" \ https://typeheard.pwa.pit.world/api/v1/transcripts
Answers 202 with { id, status, status_url, url }.
Without a key you get the first 3 minutes free.
tier=full refuses with 402 rather than quietly giving you a preview;
tier=preview never spends.
Wait, then read
curl https://typeheard.pwa.pit.world/api/v1/transcripts/ID # status: queued, running, done, failed curl https://typeheard.pwa.pit.world/api/v1/transcripts/ID/txt # also md, srt, vtt, json
Command line
curl -fsSL https://typeheard.pwa.pit.world/install.sh | sh # installs typeheard (Node 22.6+)
typeheard interview.m4a # prints the text typeheard talk.mp4 --format srt > talk.srt typeheard login # saves an API key typeheard tui # your transcripts, in the terminal
No install: npx -y @profullstack/typeheard interview.m4a.
MCP
{ "mcpServers": { "typeheard": { "command": "npx", "args": ["-y", "@profullstack/typeheard-mcp"],
"env": { "TYPEHEARD_API_KEY": "th_…" } } } }
Tools: transcribe_file, get_transcript, list_transcripts,
and list_webhooks, create_webhook, test_webhook, delete_webhook.
Webhooks
curl -H "Authorization: Bearer $TYPEHEARD_API_KEY" -H 'content-type: application/json' \
-d '{"url":"https://example.com/hooks/typeheard","events":["transcript.*"]}' \
https://typeheard.pwa.pit.world/api/v1/webhooks # answers { endpoint, secret }
typeheard POSTs transcript.completed and transcript.failed to your URL as
CloudEvents JSON signed per Standard Webhooks (webhook-id, webhook-timestamp,
webhook-signature). data has the id, status, status_url and downloads
links, never the text. Retried for about three days; dedupe on webhook-id.
Manage them at Account → Webhooks, with typeheard webhooks,
or under /api/v1/webhooks (/:id/test, /:id/rotate, /deliveries).
Agents without an account
Send the upload with no key. A metered caller over the free allowance gets
402 with an x402 offer; pay it and repeat the request with the payment header.
One payment covers a file up to 60 minutes.
Keys
Make one at Account → API keys. It is shown once.