Credentials and costs
Every service Whispr calls runs on your account. You bring the keys, they are stored in your computer's own credential store — the Keychain on a Mac, Windows Credential Manager on Windows — and they are only ever sent from this machine to the service they belong to.
Nothing you load and nothing anyone says passes through us. One thing does go to us and it is not that: a licence check, described in what leaves this machine below, which sets out every case rather than only the flattering ones.
What you actually need
Two things, and everything else is optional:
| For | What it does |
|---|---|
| Hearing the call | Deepgram, Workers AI, or a local whisper server |
| Answering | At least one model provider |
One free Cloudflare Workers AI account is enough to answer. Five providers in parallel also works — they answer the same question at once and you pick.
It can also be enough to hear: the Workers AI transcriber runs Deepgram's own model on the same Cloudflare token, so one account covers both rows. A direct Deepgram key is cheaper per minute; the Cloudflare route is one signup instead of two.
Roughly what it costs
Speech is billed by the minute, and Whispr opens two streams because your side and their side are transcribed separately. That is usually the largest running cost in a normal setup, and it is the one that scales with the length of the call rather than the number of questions.
Model providers bill by tokens. Each question sends the question, the matching passages from your prep, and some transcript context; each answer comes back at a few hundred words. Asking for a shorter answer or a different angle is another call, which is why those are buttons and nothing is generated unasked.
Settings has the real numbers: open any credential row and it gives the free allowance, the billing unit, and what a forty-five-minute call consumes. Those figures are dated, and the app never fetches prices — confirm on the provider's own page before committing to anything.
Rows with no key
Some entries in Settings have no box to paste anything into. They are listed anyway, because an absence reads as "unsupported":
- Amazon Bedrock uses the standard AWS credential chain rather than a key you paste here.
- Local whisper needs no credential at all — only a server you are running.
- Claude Code session answers through the
claudelogin already on this machine, over the Agent SDK rather than the API. - Claude session (MCP brain) hands the question to a Claude session you are already running. On a subscription there is no separate charge; on a metered plan it is a few thousand tokens a question like any other engine.
- ElevenLabs is listed as not built yet.
What leaves this machine, and what does not
Worth being precise about, because "runs locally" is often claimed loosely.
Stays here. Your recordings, transcripts, prep material and history live in a
database on this machine — ~/Library/Application Support/Whispr on a Mac,
%APPDATA%\Whispr on Windows. Your keys live in the credential store, and the
app can only ask whether one is stored — never read it back.
Goes to your providers. Audio goes to whichever transcriber you chose. Each question, the prep passages that matched it, and some transcript context go to whichever answer engines you enabled. These are your own accounts, under whatever terms you agreed with them — but it is real data leaving the machine, and worth knowing which.
Goes to a site you pasted. If you give a meeting a company web address, Whispr fetches that page to read it for you. That request comes from your Mac, carries no cookies and nothing that identifies you beyond an ordinary browser agent string, and happens only when you ask for it — never on a schedule. The site sees a visit from your machine, as it would if you had opened it yourself.
Goes nowhere at all. With local whisper and a locally-hosted model, none of the above leaves — no audio, no question, no prep. That is the point of offering both, and it is the setting to choose if the conversation is sensitive. The licence check below still runs; it is the one thing that is not switchable.
Goes to us. One thing, and only one: the licence check. Once you have signed in, this machine asks whispr.one whether your account is still entitled — on startup and every six hours after — sending a device token and this computer's name, which is the label your account page lists the device under. Signing in sends the same. Nothing else in the app talks to us, and none of it carries a question, an answer, a transcript or a document. What it does reveal, and what no wording can hide, is roughly when the app is running on this machine. An install nobody has signed in on makes no call to us at all.
The one thing we run
Exactly one piece of infrastructure is ours: the whispr.one website, signup, your account page, billing, and the licence check above. It never sees a question, an answer, a transcript or a document.
Anything that would need our credentials inside the app is treated as a design mistake here — the answer is always to make it something you configure with your own resources instead.
Setting up the voice Worker (optional)
This is the one thing Whispr asks you to deploy rather than paste. It is optional — skip it and the spoken interviewer uses Deepgram, which needs no deployment at all. It exists because running the voice on your own Cloudflare account means no Deepgram key and no per-minute charge for practice.
It has to be your account, because it is your inference bill and your data. So somebody has to put it there, and Cloudflare will do the whole thing.
If you have never set one up
- In Whispr, choose I need to set one up and press Deploy it to my Cloudflare account. That opens Cloudflare.
- Sign in, or create an account — the free plan is enough.
- Cloudflare copies the Worker into your own GitHub account, creates everything it needs, and deploys it. Two minutes, no terminal.
- Copy the address it gives you —
https://whispr-voice.<your-name>.workers.dev— and paste it into Whispr. - Invent a password for it. Any long random string. In Cloudflare: your new
Worker → Settings → Variables and Secrets → Add → choose
Secret → name it exactly
VOICE_TOKEN→ paste your string. - Put the same string into Whispr under Credentials as
WHISPR_VOICE_TOKEN.
Steps 5 and 6 are one secret in two places, and they must be identical. That is the whole security model: your Worker answers only to somebody who knows it. Nobody else can use your account, and we never see it.
If you already have one
Choose I already have one and paste the address. If the token is already stored you are done; press Test and it will say whether the credential was accepted and the endpoint was reachable.
What it costs you
Cloudflare's free plan includes 10,000 Neurons a day.
| Using it for | Roughly |
|---|---|
| Answering live questions | 2,300 Neurons for a 45-minute call — no audio is billed on that path |
| The spoken practice interviewer | about nine minutes of talking inside one free day |
Nothing bills anybody but you, and nothing runs unless you switch it on.
When it does not work
| Whispr says | What it means |
|---|---|
| no voice Worker URL is set | Nothing pasted yet, or it was cleared |
| WHISPR_VOICE_TOKEN is not stored | The password is missing on Whispr's side |
| the credential was rejected | The two strings differ. Set them again, both places |
| reachable, but nothing is deployed at that path | The address is right and the Worker is not there — check the deploy finished |
Keeping it up to date
The Worker lives in its own public repository so Cloudflare can clone it. When a new version is published there, Cloudflare rebuilds and redeploys your copy by itself — the deploy set up continuous builds from the repository in your account. You do not have to do anything.