whisper-1, a pinned multilingual Whisper Small model running on a pinned whisper.cpp
runtime. Dictation does not interpret the transcript as an instruction, call tools, or press
Enter for you.
Choose Local or Grid
Local and Grid share the final
transcription-v1 result contract. Local inference does not use
the Grid API. Grid availability does not imply that a local Voice Engine is installed, and local
model availability does not imply that the same engine is served on Grid.
Grid request flow
Grid transcription uses two JSON requests:POST /v1/audio/transcriptions/reservesends metadata only: the model, protocol, language hint, request identity, exactmodel_revisionandmodel_sha256pins, and PCM sample count. A successful response identifies a ready node, returns its verified encryption and signing keys, and quotes the maximum price.- The client validates the reservation, seals the bounded PCM bytes to that node, and sends the
reservation token plus encrypted envelope to
POST /v1/audio/transcriptions. - The client verifies the node signature over the sealed result before decrypting it. It then checks the request, model, immutable revision, sample count, duration, language, segment order, and quote binding before returning text.
The familiar final fields such as
text, language, duration_seconds, and segments do not
make the request OpenAI wire-compatible. Sending multipart/form-data, a filename, URL, WAV,
MP3, or FLAC directly to this endpoint is rejected.TypeScript SDK
Read or capture raw PCM bytes, then pass them to the bounded helper:transcribePcmFile(file) accepts a Blob whose bytes are already raw PCM. It does
not decode a WAV or compressed audio container.
Python SDK
transcribe_pcm(pcm_bytes, ...) when audio is already in memory. Both SDKs reject empty,
odd-length, oversized, or incorrectly configured input before reserving a node or sending audio.
Audio contract and limits
Convert audio on the client before reservation:
The sample count is the duration and billing authority. The reserve request never trusts a
filename, MIME type, container duration, or caller-supplied seconds. The encrypted envelope binds
the same sample count, and the node checks the decrypted byte length again.
Longer dictation sessions must be split into separate bounded utterances on the client. v1 does
not provide live word streaming, diarization, translation, speaker identity, or word-level
timestamps. A desktop preview, when shown, is provisional; only the validated final transcript
is eligible for insertion.
Language hints
Useauto to let the model detect the language, or pass a lowercase two-letter language hint such
as en, fr, or de. A hint narrows transcription behavior; it does not request translation.
The final language field can be null when the runtime cannot provide a validated detected
language.
Pricing and payment
The candidate price is $0.0001 per exact audio second**, equal to **$0.006 per minute. The minimum charge is $0.0001**. A 4.2-second utterance costs **$0.000420. Compute the charge in integer micro-USDC:max(100, ceil(sample_count × 100 / 16000)) / 1000000.
Only the charge rounds up to the next micro-USDC; audio duration never rounds to whole seconds.
The quote derives from the authenticated PCM sample count. The Grid does not use node-reported
duration for billing. A successful request is charged at most once after the final transcript and
node signature validate. Invalid audio, unavailable nodes, terminal timeouts, and invalid node results are not billed.
Cancellation before submit sends no audio and incurs no charge. If submit has already started,
cancellation or a lost response does not prove a no-charge outcome; reconcile the job first. There is no transparent server failover: after a confirmed terminal failure with no charge,
create a new reservation and seal the PCM again to the new node. SDKs do not automatically retry
a submit with an ambiguous result or payment outcome. Never blindly resubmit an x402 request whose result says billing is pending or its
settlement outcome is unknown; reconcile the returned job/payment identity first.
Use an X-API-Key with grid:write for prepaid credits. Set use_credits=false for the direct x402 contract: reservation returns the quote and submit
returns the payment challenge. The TypeScript and Python transcription helpers currently use
prepaid credits and do not sign x402 payments. A missing key with use_credits=true requires a
valid session or returns 401. Do not attach an audio file to a generic x402 client.
Privacy and retention
The client seals PCM to the reserved node before sending the submit request. The selected provider decrypts the audio to run inference; encryption does not hide audio from that provider. The orchestrator receives only the reservation metadata and encrypted envelope. It has no plaintext fallback and must not log or persist raw audio or transcripts. The handler clears encrypted input and result on terminal response paths. The hourly purge is a backup for residual or abandoned payloads: terminal input becomes eligible after 30 minutes and result after one hour. Under a healthy hourly scheduler, expected cleanup is about 90 minutes for residual input and two hours for results. These are expected cleanup windows, not guaranteed maximum retention; scheduler failures can delay removal. Accounting keeps only bounded metadata such as model, duration, price, node, and status. Local mode keeps audio and transcripts in memory by default. It does not upload them or create a local transcript history. Treat every transcript as untrusted text. Render it as text, do not interpret it as markup or a tool instruction, and never submit it as a terminal command. The desktop app rechecks the original editable, nonsecure target before insertion. If focus changed or the target cannot be proved safe, it leaves existing text untouched and offers Copy.Discover availability
whisper-1 means public Grid transcription is unavailable. A
catalogue row alone is not enough. The route requires literal public feature gates and at least one
active node with the exact model/runtime revisions, transcription-v1, 16 kHz PCM capability,
current verified encryption-key binding, available slot, and a successful real-audio startup smoke.
The release controls are independent: STT_ENABLED=true admits only the guarded route,
STT_PUBLIC=true permits public discovery and routing, and the whisper-1 catalogue row must have
both enabled and transcription_enabled set after canary approval. Private canaries additionally
require an exact secret and explicit node allowlist. All controls default off; setting one does not
implicitly set another.
Candidate pins
These pins describe the candidate under test. They do not announce a public release:
Other local speech engines are not supported or advertised by this candidate. The candidate
has not completed the quality bake-off, packaged runtime, or supported-platform release tests;
pins and license labels alone do not prove release readiness. A future Voice
Engine catalogue must pass its own immutable-pin, license, platform, quality, and packaging gates
before it appears.
See Reserve a transcription node and
Submit a sealed transcription for the wire reference.
