pool-anything
One endpoint. Every free key taking turns. Gather N keys into a single pool — every request takes the next key, usage is tracked per key, all on SQLite with a dependency-free server core.
npm i -g pool-anything && pool-anything
/api/pools/:id/proxy.Free and self-hosted for every setup. Pick the shape that matches yours — the software is the same either way.
For trying one provider with a handful of keys.
For stretching every free tier you own, daily.
For pooling behind your own auth.
One shared pool server per team, keys in one SQLite file.
Convention-friendly defaults for bigger deployments.
Fork it, extend the proxy, add your provider.
Rotation, proxying, and tracking — small surface, well lit. Start with one pool and watch the cursor move.
Open docsSend path, method, body. The pool adds the right key — header or query param — and reports which key served you.
Next key is cursor % keys.length. Every call returns key_id and label so turn-taking is visible.
Tokens per key, rolled up per pool. /usage shows used, quota, and remaining at a glance.
Point your app at one place. The pool spreads load evenly so no single free key burns out first.
cursor at key 3
No SDK. Whatever sends HTTP can pool — curl, your app, or the built-in dashboard.
Drop-in proxy call. The pool injects auth and counts tokens.
One endpoint per provider. Add keys without redeploying.
Search providers, gather keys, inspect usage per key and pool.
Illustrative setups — the kinds of projects pool-anything fits, not verified reviews.
“I had five free keys gathering dust. Now they take turns through one endpoint and my side project stays under every rate limit.”— Illustrative: solo builder, evening deploys
“We stopped hand-rotating keys in scripts. The per-key usage rollup alone saved us a weekend of quota debugging.”— Illustrative: two-person team, hackathon veterans
“SQLite, no server deps, runs on a tiny box next to everything else. The proxy responses tell me exactly which key served.”— Illustrative: self-hoster, uptime enthusiast
Groq, OpenRouter, Gemini, and 33 more preconfigured. Anything else fits the custom row — base URL, header, prefix.
Browse the registryFive minutes, start to pooled.
npm i -g pool-anything, then pool-anything for the assistant shell — or pool-anything serve for the web UI at http://localhost:3000. (From source: npm install, then npm run dev.)create pool Prod for groq, then add keys to groq — or search a provider in the UI, paste keys, hit Gather./api/pools/:id/proxy or watch the dashboard.curl -X POST localhost:3000/api/pools/1/proxy \
-H 'content-type: application/json' \
-d '{"path": "/chat/completions",
"method": "POST",
"body": {"model": "llama-3.3-70b"},
"tokens": 25}'
Install globally with npm i -g pool-anything, run pool-anything to open the assistant shell, and say create pool Prod for groq then add keys to groq. Run serve inside the shell (or pool-anything serve) for the :3000 web UI, then send one request through /proxy. The docs walk the whole loop.
Any provider in the 36-row registry, plus custom via base_url, key header, and prefix. Each pool holds keys for one provider.
Point your HTTP client at /api/pools/:id/proxy instead of the upstream. The pool picks cursor % keys.length, injects the key, forwards, and records usage.
Both. Manage keys in the UI or API key manager, then proxy live traffic through the same pools with per-key receipts.
Node 22+ for built-in SQLite and fetch. No runtime npm dependencies, one local .db file.
Every proxy or consume call appends a usage row with tokens. /usage rolls it up per key and pool with quota math where known.
Yes — create a pool with your own base_url, key_header (or query:param), and key_prefix. Provider extras merge automatically.
In a local SQLite file — ~/.pool-anything/pool-anything.db for global installs, data/pool-anything.db in a source checkout — plaintext, gitignored. Lists return masked values only; keep the API on localhost or behind your gate.
Everything the pool does, endpoint by endpoint.
Pool, rotate, proxy, track — the four jobs in one page.
Overview DocsCursor math, /next and /consume, visible turn-taking.
Rotation DocsPath, method, headers, token counting, error shapes.
Proxy GuideInstall, health checks, first pool in five minutes.
Quickstart GuideOne SQLite file, three tables, computed totals.
Under the hood GuideMasking, local-only defaults, caps and limits.
For teams