AI API Key Checker

approved

by kigrok

Validate API keys and check rate limits for 20+ AI providers. - This plugin has not been manually reviewed by Obsidian staff.

81 downloadsUpdated 2mo agoMIT

AI API Key Checker

AI API Key Checker

Validate API keys and detect rate limits for 21 AI providers — right inside Obsidian, in one click.

TypeScript Obsidian Community Plugin Version Downloads Platform License


✨ 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:20 or LIMIT — 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 bar12 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

  1. Download main.js, manifest.json, and styles.css from the latest release.
  2. Drop them into YourVault/.obsidian/plugins/api-key-checker/:
    YourVault/.obsidian/plugins/api-key-checker/
    ├── main.js
    ├── manifest.json
    └── styles.css
    
  3. 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

  1. Click the key icon in the left ribbon (or run the command AI API Key Checker: Open panel).
  2. Hit Add key, pick a provider, paste one or more keys (one per line).
  3. Read the results — grouped by provider, worst status first.

🔌 Supported providers

21 providers — click to expand
ProviderCheck MethodNotes
OpenAI/v1/models
Anthropic/v1/models
Google GeminiModel list + Gemini probeDetects daily quota reset
Groq/v1/models
GrokChat completion (grok-3)
FreeModelAnthropic messages APIParses reset time from 402
AerolinkAnthropic messages API
OpenRouterChat completionShows balance
KimchiAnthropic messages APIDetects rate limit via error body
OpenCode ZenChat completion (free model)
Xiaomi MiMo/v1/modelsBearer auth
Amazon BedrockModel invoke (nova-lite)Detects proxy limitations
Z.aiChat completion (glm-5)
InferAll/v1/models
InceptionChat completion (mercury-2)
FireworksChat completion (deepseek-v4-pro)
AbliterationChat completion (abliterated-model)
AnyapiChat completion (free model)
AurikoChat completion (gpt-3.5-turbo)
v0/v1/chats
FeatherlessChat completion (Mistral-7B)

🎯 Status legend

StatusMeaning
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

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.