Skip to main content

Where your audio goes

HyperWhisper has three transcription paths. Each path has a different effect on your privacy:
For zero risk of model training on your audio, use local transcription. Local transcription is offline, and the audio stays on your Mac or PC.

HyperWhisper Cloud

HyperWhisper Cloud sends your audio to a backing speech-to-text provider. It also sends your transcribed text to a backing LLM for post-processing. HyperWhisper does not store your audio on its own servers. The edge servers process the audio in memory, then delete it after they return the response.
Every HyperWhisper Cloud engine that you can select sends your audio in the request. No such engine writes your audio to a temporary bucket. The Google Gemini 3.5 Transcribe engine has the smallest limit: audio of more than 14 MB gets a “file too large” error. For the limits of each engine, see File Transcription.
HyperWhisper applies the strongest documented data-protection control that each provider gives. For providers with such a control, HyperWhisper does this work:
  • If a provider has a per-request no-train / no-store flag, HyperWhisper sets the flag on every call (for example, the mip_opt_out flag of Deepgram).
  • If the control is account-level, HyperWhisper enables zero-data-retention on the HyperWhisper account (for example, Groq).
  • If a provider has neither control, HyperWhisper deletes the transcript immediately after it gets the transcript (for example, AssemblyAI). HyperWhisper also opted out of model training with AssemblyAI.
Some providers store data for a short time for abuse monitoring. Grok and Mistral store it for approximately 30 days. These providers do not use the data to train their models. ElevenLabs stores data by default. Its zero-retention mode is available only on enterprise plans, and HyperWhisper works to enable it. If data storage is critical for your use, select a different cloud model or use local transcription. Meta is a data processor for Muse Voice Transcribe requests. HyperWhisper sends the audio to Meta for transcription. Meta’s public Muse speech-to-text API documentation does not document audio retention, request logging, or use of API data for model training. HyperWhisper does not claim a no-store or no-train policy for Meta because Meta has not documented one there. As a HyperWhisper Cloud user, you do not configure a provider control. The documented provider policies and the Meta exception are in this section.

Which app made the request

Every request to HyperWhisper Cloud says which app sent it, through two headers:
The platform is macos, windows, or ios. The version is the app version you run. HyperWhisper writes both to the server log for the request, so a fault can be traced to one platform and one app version. Neither header names you, your device, or your account. The Linux app does not send these two headers. Its requests show as unknown in the server log.

Timing measurements

HyperWhisper Cloud times each provider call and stores the timing. These timings make the public latency page, which shows how fast each provider answers in each region. One stored row holds only these facts:
  • The provider, and the model. If the call worked, this is the model that ran. If it failed, no model ran, so it is the model the call asked for.
  • The server region that made the call.
  • Which clip-length group the audio is in: under 10 seconds, 10 to 30 seconds, or more than 30 seconds. The group comes from an estimate of the length, calculated from the size and the format of the audio. The length itself is not stored.
  • The position of the call in the fallback sequence: 1 for the first provider, 2 for the next one, and so on.
  • How long the provider took, in milliseconds.
  • Whether the call worked, and the failure type if it did not.
  • The hour in which the call happened. HyperWhisper stores the time rounded down to the hour, and no more accurately.
If HyperWhisper stops a request before it sends anything to a provider, for example because the audio is too large or in a format that provider does not accept, it stores no row. The provider did not receive the call, so the measurement is not its own. A row holds no account, no key, no request identifier, no IP address, no audio, and no text. Nothing links a row to a person. Two facts stay out of the row on purpose, because each one would let a person group the rows of one transcription together: the exact time, and the exact length of the audio. Every attempt on one transcription sends the same audio, so an exact length works as a request identifier in the same way an exact timestamp does. HyperWhisper keeps the hour and the clip-length group only. HyperWhisper deletes these rows after 1 year. The public page shows only the last 90 days. Local models never send a timing measurement. Only HyperWhisper Cloud does.

How to stop the measurements

Open Settings → General and turn off Share anonymous speed data. The change applies to your next transcription. Your transcriptions do not change when you turn this off. The same providers run, at the same speed, and you get the same result. The only difference is that the server does not store the timing. Under the hood, the app adds one request header:
The server reads this header and discards the measurement instead of storing it. Two other things are never measured, whatever you send:
  • App versions that predate this setting. The switch arrived in macOS 2.43.0 and Windows 1.10.0. Sharing is on by default, and the server does not apply that default to a build that could not turn it off. Older versions are not measured at all. Update to take part.
  • Direct calls to the HyperWhisper Cloud API. A caller who is not one of the apps never saw the setting, so nothing it sends is stored. You do not need to send any header.

Error reports

Error reports go to the crash reporter (Sentry). They are on by default on all three platforms. They hold no audio and no text. To stop them, turn off Error logging (macOS), Send error reports (Windows), or Send privacy-filtered crash and performance diagnostics (Linux) in Settings → General. Read General Settings for that setting. The switch takes effect immediately, on all three platforms. The app does not need a restart.
On Linux, the setting sends no transcript, no audio, no prompt, and no credential content. A build that you compile yourself has no release crash-reporter address, so it stays fully offline even when the setting is on.

Export a diagnostics archive (Linux)

Linux can also write a diagnostics archive to a file that you choose, for a support request. Open Settings → Privacy-safe diagnostics, then click Choose destination and export diagnostics…. Nothing leaves your computer until you send the file yourself. The archive holds three entries and nothing else: HyperWhisper writes the file so that only your user account can read it. Review the archive before you send it.

The no-speech diagnostic

A transcription that finds no speech is usually correct: you said nothing, or the microphone heard nothing. HyperWhisper does not report that case. But an engine can also return an empty result for a recording that does contain speech. To find these faults, the app measures the audio after each No speech detected result. If the measurement contradicts the result, the app sends one error report. If the measurement agrees that the recording is silent or very quiet, the app sends nothing. The report holds measurements and provider metadata only. It holds no audio and no transcript text. On both macOS and Windows, it can hold:
  • Whether the measurement worked, and the error if it did not
  • The length of the recording, in seconds, and the size and extension of the file
  • The sample rate, the number of channels, and the decoded and measured sample counts
  • The peak level and the average level, in dBFS, and how much of the recording is above the silence threshold
  • The selected input device and whether the provider reported no speech
  • The provider type, the Cloud provider, or the local engine
On macOS, the report also holds the mode name and whether automatic microphone boost failed. On Windows, the report does not hold the mode name or the audio file path. It holds the mode preset, configured language, provider display name, capture-device count, and a local diagnostic record ID. It can also hold the provider-attempt source and time, the length of the raw result as a number, and available backend metadata such as a request ID, provider, HTTP status, and response time. A value of 0 for the raw-result length means that the provider returned an empty string. The report never includes the string itself. The app sends one report for each recording. To send none, turn the error-report setting off.

Streaming error diagnostics (macOS)

When a streaming session fails on macOS, the error report includes the state of that session. The metadata can include:
  • The provider, model, and stage of the session
  • The elapsed time for the session, the current connection, and microphone audio
  • The number of final and partial results delivered
  • The reconnect count and audio-send failure count
  • The WebSocket close code, whether the session-complete message arrived, and whether the app started the close
  • The streaming session ID and, when available, the network error domain and code
These fields contain counts, durations, fixed identifiers, and connection state. They contain no audio, transcript, prompt, or pasted text. HyperWhisper removes URL details from a macOS network error before it sends the error. This prevents the account key in the streaming WebSocket query from entering the report.

Your own API keys (BYOK)

If you configure your own API key in Model Library → API Keys, your device sends the audio directly to that provider. The request uses your account with that provider, under the terms of that provider. For direct Meta Muse, the device connects to api.meta.ai. The Meta key stays in the operating system’s secure credential store, and the audio request does not reach HyperWhisper servers. Meta’s public speech-to-text documentation does not state its retention, logging, or model-training rules, so review your Meta account terms before use.
With your own API keys, you are usually responsible for your own opt-out. HyperWhisper cannot change dashboard-level settings on an account that HyperWhisper does not control. Each provider has its own default. Some providers do not train on API data. Other providers do train on API data until you opt out.

Deepgram BYOK — HyperWhisper opts out for you

For Deepgram, HyperWhisper does this work for you on macOS and Windows. Every direct Deepgram request from the app includes mip_opt_out=true in the query string. The flag applies to each request, so you do not change any setting on your Deepgram dashboard. To make sure of this, open a recent request in console.deepgram.com under Usage → Logs. The request detail shows mip_opt_out: true.

Other providers — quick reference

This table shows the public policies at the date of this page. Providers can change their terms. If the policy of a provider is critical to your use, do a direct check with the prompt in the next section.

How to do a check on any provider

Provider data policies change. Providers rename pages and redesign settings. The most reliable check is a question to a current language model. Open ChatGPT, Claude, or another LLM with web access. Then paste this prompt:

If you already used a key without an opt-out

You can do these three things:
  1. Opt out now. Most providers stop the training use of new requests immediately after you change the setting. This applies even if they used your past requests.
  2. Request a deletion. Many providers accept deletion requests for content that you sent before. Use the same LLM prompt with this question: “how do I request deletion of past API data on {PROVIDER}?”
  3. Rotate the key. For a clean cut-off point, generate a new key on the provider dashboard. Then replace the old key in Model Library → API Keys.

Summary

  • Local: the audio stays on your device.
  • HyperWhisper Cloud: HyperWhisper does not store your audio. It applies each provider’s strongest documented no-train / no-store control. Most providers store nothing. Some providers store data for a short time for abuse monitoring, and do not train on it. ElevenLabs stores data by default, until HyperWhisper completes an enterprise zero-retention upgrade. Meta does not document retention, request logging, or model-training use for Muse API data in its public speech-to-text documentation. HyperWhisper stores anonymous timing rows for the public latency page, and deletes them after 1 year. To stop them, turn off Share anonymous speed data in Settings → General.
  • Your own API key: the opt-out is mostly your responsibility. Deepgram is the exception, because HyperWhisper adds mip_opt_out=true to every request from the app.
  • Error reports: these hold no audio and no text. To stop them, turn off Error logging (macOS), Send error reports (Windows), or Send privacy-filtered crash and performance diagnostics (Linux) in Settings → General.

Related documentation: