Sale10% off Pro until 30 SeptemberGet Pro
Vibe Typer Voice API

Vibe Typer's voice typing, inside your app

The Vibe Typer Voice API puts the same fast, accurate voice pipeline behind any text field in your app. Your users speak naturally in any of 99 languages, and clean, corrected text lands moments after they stop. It costs US$0.50 per audio hour.

Read the docs

Using Claude Code, Cursor or Codex? Paste the prompt in and your agent adds voice typing to your app for you. You just add your API key.

Your user says

um can we move the review to noon actually make that 3 PM on Friday and uh send the agenda the day before

Your text field gets

Can we move the review to 3 PM on Friday and send the agenda the day before?

The same pipeline as the Vibe Typer app

Everything that makes Vibe Typer fast and accurate on desktop and iPhone, running behind your text fields.

Fast

Text lands moments after your user presses stop. In Chrome and Edge the audio streams while they speak, so there's no upload to wait for.

Accurate

Transcription runs on large cloud speech models, the same ones behind the Vibe Typer app. There's no model to pick and nothing to tune.

Multilingual

99 languages, detected on every recording. Users can switch language between recordings, and there's no language picker to build.

Magic Formatter

It hears “no wait”, “scratch that” and “actually make that” and types what the user meant. Filler words go, and punctuation and capitals are fixed. It's included in the price, and you can turn it off.

Live in three steps

One key on your server, one route and one element. Or copy the prompt and let your coding agent do it.

  1. 1

    Get an API key

    Sign in and press Get API key. Add a card at checkout, and Polar's confirmation page shows your key. After that, Get API key opens your billing portal, where the key is under Benefit Grants. Save it as an environment variable on your server.

    .env
    VIBE_TYPER_API_KEY=VTSK-...
  2. 2

    Add the token route

    Install @vibetyper/voice and add a route behind your existing login. It trades your secret key for a token that covers one recording, so the key never reaches the browser.

    app/api/voice-token/route.js
    import { voiceTokenResponse } from '@vibetyper/voice/server';
    
    export async function POST(request) {
    	const user = await requireUser(request);
    	return voiceTokenResponse({
    		apiKey: process.env.VIBE_TYPER_API_KEY,
    		userId: user.id,
    	});
    }
  3. 3

    Add the button

    Put <vibe-voice> next to any input or textarea. The user presses record, speaks, presses stop, and the text lands at the cursor. Rich editors listen for the text event instead.

    index.html
    <script type="module" src="https://cdn.jsdelivr.net/npm/@vibetyper/voice@0.1/dist/voice.js"></script>
    
    <textarea id="message"></textarea>
    <vibe-voice token-url="/api/voice-token" for="message"></vibe-voice>

Less for you to build

A Whisper API alternative that handles the microphone, the upload and the text field, not just the transcript.

No audio handling on your side

The element opens the microphone, records, downsamples and uploads. Your app only ever receives text.

Your secret key stays on your server

The browser only holds a token for one recording, issued by your own login-protected route. A token copied from DevTools is worth one recording at most.

Every modern browser

Chrome, Edge, Firefox and Safari, including every browser on iPhone. It works as a voice typing React component in React 19, or as a plain custom element anywhere else.

Pay for the audio you send

US$0.50per audio hour

Billed by the second

  • Pay as you go, billed monthly
  • Magic Formatter included at no extra cost
  • US$100 monthly limit by default, raised on request
  • Usage is non-refundable

Get API key starts pay as you go at US$0.50 per audio hour. Add a card at checkout, and you're billed monthly with no fixed fee. Your limit starts at US$100 a month, and usage is non-refundable. By getting a key you agree to the Voice API Terms.

Questions about the Voice API

Sign in on this page and press Get API key. Add a server route that trades your secret key for a recording token, then put the <vibe-voice> element next to any input or textarea. Users press record, speak, press stop, and the text appears in the field.

It supports 99 languages and detects the spoken one on every recording, so there's no language setting to build or pass. Users can switch languages between recordings without changing anything. Magic Formatter cleans up the text in whatever language was spoken, and you can turn it off with magic-formatter="off".

Yes. It works in Safari on the Mac and in every browser on iPhone and iPad, as well as Chrome, Edge and Firefox. Chromium browsers stream the audio while the user speaks. Safari and Firefox upload it when the user presses stop, which adds about a second to a 20 second dictation.

No. Audio is processed in memory to produce the text, then discarded. We don't store recordings or transcripts, and we don't use them to train models. For each recording we keep only its length, a timestamp and the user ID your server sent, so we can bill you and enforce limits.

Yes. The same element runs in Electron, Tauri and other web-based desktop apps once you allow microphone access. Native apps built with Swift, C# or Qt record 16 kHz audio and call the HTTP API directly. Either way, tokens come from your server. Never ship the secret key inside the app.

Every account starts with a US$100 monthly limit, which is 200 hours of audio. We email you at 90% and again at 100%. At the limit, new recordings pause until your next billing period and the element shows a short message. Reply to either email and we can raise it.

Whisper gives you a raw transcript, and you still build the recording, audio conversion, upload and key handling yourself. The Vibe Typer Voice API ships all of that as one element, keeps your key on your server, and runs Magic Formatter so filler words and punctuation are fixed before the text reaches your app.