Roo Code: a five-minute setup
Roo Code is a Cline fork with nearly identical provider settings. Here is the shortest path from installing the extension to a working first request.
4 min · · Updated · IDE
Roo Code is a Cline fork, and its provider settings work almost the same way. The menu labels differ slightly, but the logic — which base URL goes where — is identical. Here are five steps, no detours.
Step 1. Get a key
Go to https://zukko.pro/app/api-keys and create a key. It's shown once, in the fetch_... format — copy it immediately, it won't be shown again.
Step 2. Open the provider settings
In the Roo Code panel, open Settings (gear icon) → Providers. Pick one of two API Provider options depending on which models you need:
- Anthropic — for Claude models over
/v1/messages. - OpenAI Compatible — for GPT, GLM, or Claude again, over
/v1/chat/completions.
Step 3. Base URL — the step that actually matters
This is where most time gets wasted. The base URL depends on the provider you picked:
- Anthropic:
https://api.zukko.pro— no/v1, Roo Code appends the path itself. - OpenAI Compatible:
https://api.zukko.pro/v1— with the suffix.
A mixed-up suffix is the most common cause of a 404 on first connection: the key gets accepted, but every request goes nowhere.
Step 4. Enter the key and pick a model
API Key: paste fetch_... with no leading or trailing spaces.
Model:
- Via the Anthropic provider —
claude-opus-5-5(Claude Opus 5.5, 1,000,000-token context) orclaude-sonnet-5. - Via OpenAI Compatible —
gpt-5.6-sol,gpt-5.6-luna,glm-5.3,glm-5.3-flash, or the same Claude models.
Current model list, no key required:
curl https://api.zukko.pro/v1/modelsStep 5. Confirm it works
Ask Roo Code a simple question in chat. If it answers, you're done. If not, test the key separately from the extension:
curl https://api.zukko.pro/v1/chat/completions \
-H "Authorization: Bearer fetch_your_key" \
-H "Content-Type: application/json" \
-d '{"model":"claude-sonnet-5","messages":[{"role":"user","content":"ping"}]}'If curl answers but Roo Code doesn't, the issue is in the extension's config. If curl doesn't answer either, the error body tells you exactly what's wrong.
Common errors on first run
401— key rejected:{"error":{"message":"Invalid API key. Use Authorization: Bearer fetch_*","type":"authentication_error"}}. Usually a typo or a key truncated during copy-paste.402— empty balance:{"error":{"message":"Недостаточно средств на балансе","code":"insufficient_balance"}}. The check happens before the request reaches the model, so a failed attempt is free.404 model_not_found— the model doesn't match the catalog; case and version dots matter.400 model_retired— the model has been retired, and the error text names its replacement.503 model_disabled— the model is disabled in the catalog; pick another one from/v1/models.403 model_not_allowed_for_key— this key has an allowed-models list set in the dashboard, and the requested model isn't on it.429— from Zukko this only means a per-key limit (key_daily_limit_reached, which resets at 00:00 UTC, orkey_monthly_limit_reached); the gateway has no general rate limit, and any other 429 comes from the model provider.
Worth turning on right away
If Roo Code fires off many fully identical requests in agent mode — repeated checks of the same file, for example — turn on caching: the X-Zukko-Cache: true header (temperature: 0 also enables it, but only on models that accept it — Claude models may reject a temperature other than 1). Requests from the same user with a fully matching body are cached for up to 7 days for chat (similar but not identical ones aren't), the repeat answer comes back instantly and free, and the response carries X-Zukko-Cache: hit.
If your network is flaky and Roo Code occasionally resends a request after a dropped connection, add an Idempotency-Key header with a unique value per logical request (kept the same across its retries) — replaying the same key within 24 hours returns the same response without charging twice.
Limits and money
On a key's page in the dashboard you can set a daily or monthly spend cap in dollars and restrict the list of allowed models — useful if the key is shared across a team project. The server sends X-Zukko-Cost-Micros (the cost of that request in micro-dollars, 1,000,000 = $1) and X-Fetch-Balance-Cents (the remaining balance after the charge, also in microdollars) only on regular JSON responses, and Roo Code receives responses as a stream — streaming responses don't carry these headers. For Roo Code, check spend in the dashboard, via GET /v1/usage, or GET /v1/balance.
Top up via SBP, a card through PayPear, crypto, or a foreign Mastercard EU card through Fride (about 13% fee, amounts $2–$594); the minimum is $1. A one-time $0.50 bonus comes from subscribing to @zukkopro: link Telegram in the dashboard, subscribe, press "Check"; once per Telegram account. There's no starting balance for a plain signup anymore.
Free token counting before you run anything
Roo Code in agent mode can pack several project files into a single request, and it helps to know the token cost beforehand. The /v1/messages/count_tokens endpoint counts tokens without running the request and without charging anything:
curl https://api.zukko.pro/v1/messages/count_tokens \
-H "Authorization: Bearer fetch_your_key" \
-H "Content-Type: application/json" \
-H "anthropic-version: 2023-06-01" \
-d '{"model":"claude-sonnet-5","messages":[{"role":"user","content":"the task text"}]}'Full spending history
GET /v1/usage returns the charge history for the whole account (all keys together, no per-key filter) with cursor pagination — useful for seeing which Roo Code run burned the most tokens when several ran back to back. If the key is shared across a team, set limits on the key's dashboard page up front rather than sorting out who spent what afterward.
zukko
Pay 25×
less
for Claude Code & ChatGPT
One fetch_* key and base URL api.zukko.pro — for Cursor, Claude Code, Codex, and any SDK.
Related articles
- JetBrains AI Assistant not working: causes and workaroundsAI Assistant will not activate, stays silent or is off for some files. We go through the causes in the JetBrains docs and connect your own models via a gateway.
- DeepSeek in VS Code: connecting through Cline, Kilo Code and ContinueWe connect DeepSeek to Cline, Kilo Code and Continue with a single key, choose between Flash and Pro, and estimate the cost of a working day with an agent in the editor.
- GitHub Copilot alternatives with your own API key: what to chooseCline, Kilo Code, Continue and Cursor work with your own key. We compare where they live, how they connect to a gateway and how to estimate spend.
- Invalid API key in opencode: why the key is rejected and how to checkThe Invalid API key error in opencode almost always comes down to four causes. We test the key outside opencode and find where the chain breaks.