pool-anything logopool-anything
Docs Start pooling

Pool free-tier API keys into one rotating endpoint

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.

Start pooling
npm i -g pool-anything && pool-anything

Opens an assistant shell — list pools, add keys to groq, serve for the :3000 UI. 36 providers preconfigured · keys stay local and masked. Read the docs →

Other ways to pool:WatchTerminalProxy APILive demo

pool-anything — pools36 providers
Pools groq · 5 keys openrouter · 3 gemini · 4 mistral · 2 cursor → key 3
# pick the next key, inject auth, forward
POST /api/pools/1/proxy
{ "path": "/chat/completions",
  "tokens": 25 }

{ "key_id": 3, "status": 200,
  "masked": "gsk_…c4" }
rotation — cursor % keys.lengthlive demo ↓
$ pool-anything "list pools"
via key 1 (gsk_…ab): HTTP 200, 25 tokens
via key 2 (gsk_…9f): HTTP 200, 25 tokens
via key 3 (gsk_…c4): HTTP 200, 25 tokens
Watch it work — five Groq keys gathered into one pool in 22 seconds. Paste keys, hit Gather, then proxy through /api/pools/:id/proxy.
✦

Who pools with pool-anything

Free and self-hosted for every setup. Pick the shape that matches yours — the software is the same either way.

First pool

For trying one provider with a handful of keys.

  • One pool, a handful of keys
  • Round-robin + usage log
  • Local SQLite, masked lists
Start pooling

Every free tier

For stretching every free tier you own, daily.

  • A pool per provider
  • Proxy + token tracking
  • Analytics dashboard
Start pooling

Behind your gate

For pooling behind your own auth.

  • Custom base_url + headers
  • Per-key audit trail
  • Bring your own auth
Read security notes
✎

Latest from
the pool

Rotation, proxying, and tracking — small surface, well lit. Start with one pool and watch the cursor move.

Open docs
proxy

One POST does pick, inject, forward

Send path, method, body. The pool adds the right key — header or query param — and reports which key served you.

rotation

Cursor math you can audit

Next key is cursor % keys.length. Every call returns key_id and label so turn-taking is visible.

usage

Every request leaves a row

Tokens per key, rolled up per pool. /usage shows used, quota, and remaining at a glance.

❖

What one pool can take on

Point your app at one place. The pool spreads load evenly so no single free key burns out first.

● ● ●pool-anything — onboard.log
your appPOST /proxy
pool-anythingpick, inject, forward
keys 1–5cursor % length
Rotation well52 requests (demo)

    cursor at key 3

    • #0Press “Fire a request” to move the cursor and fill the ledger.
    ▦

    Meets you where you call

    No SDK. Whatever sends HTTP can pool — curl, your app, or the built-in dashboard.

    $ curl -X POST localhost:3000/api/pools/1/proxy \
      -d '{"path":"/models"}'

    { "key_id": 1, "status": 200 }

    Straight from the terminal

    Drop-in proxy call. The pool injects auth and counts tokens.

    curlhttpieany lang
    # your app — one base url
    BASE = "http://localhost:3000/api/pools/1"
    POST(f"{BASE}/proxy", json={"path": ...,
      "body": {...}, "tokens": 25})

    Integrate with your app

    One endpoint per provider. Add keys without redeploying.

    pythonnodego
    # analytics dashboard
    pools ··········· 3
    keys pooled ····· 14
    tokens tracked ·· 48.2k

    Watch it in the UI

    Search providers, gather keys, inspect usage per key and pool.

    :3000/pools/keys
    ◍Kick off rotations from anywhere — point CI, cron, or a chat hook at /proxy and keys take turns. Proxy docsLearn more →

    What it feels like in practice

    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
    groqopenroutergemini mistralcoherefireworks togetheropenaianthropic huggingfacereplicateelevenlabs

    Connects with your favorite providers

    Groq, OpenRouter, Gemini, and 33 more preconfigured. Anything else fits the custom row — base URL, header, prefix.

    Browse the registry
    ⚙

    Run it on your machine

    Five minutes, start to pooled.

    Three steps

    1. 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.)
    2. In the shell: create pool Prod for groq, then add keys to groq — or search a provider in the UI, paste keys, hit Gather.
    3. Send traffic through /api/pools/:id/proxy or watch the dashboard.

    Drop-in call

    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}'
    ?

    FAQ

    How do I get started with pool-anything?

    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.

    What kind of keys can I pool?

    Any provider in the 36-row registry, plus custom via base_url, key header, and prefix. Each pool holds keys for one provider.

    How does rotation work with my existing code?

    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.

    Is it a proxy or a manager?

    Both. Manage keys in the UI or API key manager, then proxy live traffic through the same pools with per-key receipts.

    What are the system requirements?

    Node 22+ for built-in SQLite and fetch. No runtime npm dependencies, one local .db file.

    How much usage can it track?

    Every proxy or consume call appends a usage row with tokens. /usage rolls it up per key and pool with quota math where known.

    Does it work with custom endpoints?

    Yes — create a pool with your own base_url, key_header (or query:param), and key_prefix. Provider extras merge automatically.

    Where do keys live?

    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.

    ✦

    Get the technical rundown

    Everything the pool does, endpoint by endpoint.