Keys
Keys live in your OS keychain, are never displayed again, and can be tested with one token before you trust them.
On this page
Provider keys
Settings → Providers picks the default LLM provider and model (see Extract for the seven and their billing). For a keyed provider, the API key section shows where the current key comes from — session, environment, keyring, sealed file, or none — and offers:
- Use for this session — overrides everything until the app quits.
- Save — persists to the OS keychain.
- Test — spends one token and reports the model, latency in milliseconds, and prompt/completion token counts. A 401 is the diagnosis; the provider’s own error is shown verbatim.
- Clear session key — back to the persisted stack.
The app never displays a stored key. Paste a new one to replace it.
Other credentials
Settings → Keys covers everything that is not an LLM provider:
| Group | Credentials |
|---|---|
| Search engines | Brave, Exa, SerpAPI, Serper API keys; the SearXNG instance URL |
| Site extractors | A GitHub token; Reddit app credentials (id, secret, a User-Agent string) |
Each row shows its source badge. An environment variable wins over a stored value — the row says whose value is in play, and env-sourced keys are marked “may be stale”. Stored values are never shown again; paste to replace, remove with the confirm button.
Where keys live
The OS keychain: Windows Credential Manager, macOS Keychain, Linux’s Secret Service. Where a desktop has none, values are sealed encrypted into keys.json beside the config — the row’s badge says which. Nothing is sent anywhere except the provider it belongs to.
Environment variables still work and keep their CLI meaning: MAGPIE_<PROVIDER>_API_KEY for providers, MAGPIE_BRAVE_API_KEY and friends for engines, MAGPIE_SEARXNG_URL for a self-hosted SearXNG. The resolution order is flag > env > keyring > config file, so a key saved in the GUI is the fallback, not the fight.
Per-run keys
Every screen that can spend money — Scrape, Crawl, Research, Search — takes an API key (this run) field. It applies to that run’s provider only and is never stored: close the drawer and it is gone. Useful for a scoped or throwaway key, or for trying a second account without disturbing the saved one.
The monthly budget bounds everything a metered provider bills, whichever key paid for it.