README file from
Github✨ Features
- Instant validation — every key is checked against the real provider API, not a regex.
- Rate-limit & balance detection — tells apart a bad key from a good key with no quota, and shows exactly when the limit resets:
LIMIT — 17:20orLIMIT — 07.11 15:00. - Bulk check — paste 50+ keys at once, get results in seconds.
- Smart sorting — broken keys float to the top so you spot problems first.
- Click to copy — click a masked key to copy it; hover to reveal the full value.
- Stats bar —
12 OK | 3 LIMIT | 2 INVALID (17 total)at a glance. - Last-check time — see when each provider was last verified.
📦 Installation
From Obsidian
Open Settings → Community plugins → Browse, search for AI API Key Checker, and install — or open it directly in the community plugin catalog. Then enable the plugin.
Manual
- Download
main.js,manifest.json, andstyles.cssfrom the latest release. - Drop them into
YourVault/.obsidian/plugins/api-key-checker/:YourVault/.obsidian/plugins/api-key-checker/ ├── main.js ├── manifest.json └── styles.css - In Obsidian: Settings → Community plugins → Reload, then enable AI API Key Checker.
Via BRAT
Add this repository in the BRAT plugin to auto-update from releases.
🚀 Usage
- Click the key icon in the left ribbon (or run the command AI API Key Checker: Open panel).
- Hit Add key, pick a provider, paste one or more keys (one per line).
- Read the results — grouped by provider, worst status first.
🔌 Supported providers
| Provider | Check Method | Notes |
|---|---|---|
| OpenAI | /v1/models |
|
| Anthropic | /v1/models |
|
| Google Gemini | Model list + Gemini probe | Detects daily quota reset |
| Groq | /v1/models |
|
| Grok | Chat completion (grok-3) | |
| FreeModel | Anthropic messages API | Parses reset time from 402 |
| Aerolink | Anthropic messages API | |
| OpenRouter | Chat completion | Shows balance |
| Kimchi | Anthropic messages API | Detects rate limit via error body |
| OpenCode Zen | Chat completion (free model) | |
| Xiaomi MiMo | /v1/models |
Bearer auth |
| Amazon Bedrock | Model invoke (nova-lite) | Detects proxy limitations |
| Z.ai | Chat completion (glm-5) | |
| InferAll | /v1/models |
|
| Inception | Chat completion (mercury-2) | |
| Fireworks | Chat completion (deepseek-v4-pro) | |
| Abliteration | Chat completion (abliterated-model) | |
| Anyapi | Chat completion (free model) | |
| Auriko | Chat completion (gpt-3.5-turbo) | |
| v0 | /v1/chats |
|
| Featherless | Chat completion (Mistral-7B) |
🎯 Status legend
| Status | Meaning | |
|---|---|---|
OK |
🟢 | Key is valid and working |
LIMIT |
🟡 | Key works but is rate-limited or out of credits (shows reset time) |
INVALID |
🔴 | Key rejected — check for typos or expiry |
ERROR |
🟠 | Network issue or the provider is down |
🔒 Privacy
Your keys never leave your machine except to reach the provider you are validating.
There is no telemetry, no analytics, and no third-party server in between.
Keys are stored locally in .obsidian/plugins/api-key-checker/data.json — treat that file as a secret and never commit it.
The click-to-copy feature writes the selected key to your system clipboard only when you click it; the plugin never reads clipboard content.
🛠️ Development
npm install # install dev dependencies
npm run dev # watch-mode build (esbuild)
npm run build # type-check + minified production bundle -> main.js
npm run lint # ESLint (typescript-eslint + eslint-plugin-obsidianmd)
Source lives in src/ (main.ts = UI/plugin lifecycle, checker.ts = validation engine). Obsidian only loads the bundled main.js, so rebuild after every change. Adding a provider is a five-step change — see CLAUDE.md.
📄 License
MIT © VenvStore