Voice input
that feels native

Add state-of-the-art dictation to your app or website with one SDK, so users can write by speaking

Roman mosaic artwork variant 01: Canem

The Headless SDK
for Transcription

Coordinate models, auth, quotas, fallback, and insertion from a small headless API.

Speak once. Use the transcript anywhere.

Open the shortcut, watch the transcript form, then insert clean text wherever work is happening.

Best Whisper

Voice typing

Live transcription

Ready for selected field

Active

OpenAI

Deepgram

Mistral

Auto punctuation
Custom vocabulary 24 words
⌘ Shift Space 1,248 min left

Free

1,000

words per day

Daily limit

  • Start transcribing immediately
  • Core voice-to-text workflow
  • Copy-ready output
Get started for free

No credit card required

Unlimited

Unlimited

words per day

No daily limit

  • Unlimited daily transcription
  • Longer recording sessions
  • Priority export workflow
Upgrade to pro

Cancel anytime

Choose your transcription volume

Start free, then unlock unlimited dictation when daily writing volume grows.

Add voice input without owning the speech stack.

Install the SDK, connect lifecycle events, and send final transcripts back into your product.

Install

package
npm install @dictum/sdk

Headless client

web
import { createDictumClient } from "@dictum/sdk";

const dictum = createDictumClient({
  projectKey: "pk_live_xxx",
  userRef: "user_123",
  language: "auto",
  correction: true
});

dictum.on("state", ({ value }) => setRecorderState(value));
dictum.on("partial", ({ text }) => renderDraft(text));
dictum.on("final", ({ transcript }) => insertTranscript(transcript));

await dictum.prepare();
await dictum.listen();
await dictum.record();
await dictum.stop();

Lifecycle

prepare()

Ask for microphone permission and create local audio resources.

listen()

Open the microphone and wait for user speech intent.

record()

Capture audio and emit recording state.

pause()

Pause capture without destroying the session.

resume()

Resume capture on the same session.

stop()

Finalize capture and stream transcript events.

cancel()

Close capture and discard the current audio cycle.

destroy()

Remove listeners and release resources.

Events

state

{ value }

Lifecycle state changed.

partial

{ text, sequence }

Incremental transcript for live UI.

final

{ transcript, language, durationMs }

Final transcript for insertion.

done

{ transcript, usage }

Capture and post-processing completed.

error

{ code, message, retryable }

Failure that the app can render or log.