Zukko Blog

Guides to Claude Code, Cursor, Codex and the Claude and GPT APIs: setup, token savings and troubleshooting.

JetBrains AI Assistant: connecting in IntelliJ and PyCharm

4 min · · IDE

JetBrains AI Assistant accepts third-party keys through its custom OpenAI-compatible provider section — here is exactly which field gets the URL and which gets the model.

Zed: setting up the AI assistant with your own key

4 min · · IDE

Zed is configured through settings.json, and its anthropic provider expects a URL without /v1 — miss that detail and the assistant panel just keeps returning 404.

Continue.dev: connecting to the gateway

4 min · · IDE

Continue.dev is configured through a config.yaml file rather than a settings form, which is exactly how a stale apiBase or an extra slash survives unnoticed. Here is a working config.

Roo Code: a five-minute setup

4 min · · IDE

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.

Cline: connecting to Claude and GPT with your own key

5 min · · IDE

Cline can talk to a gateway in either Anthropic mode or OpenAI mode, and the base URL depends on which one you pick. Both paths, plus the 404 that trips people up first.

Getting strictly structured JSON out of the model

3 min · · API

Asking the model to "reply in JSON" in the system prompt works about half the time. Here is a more reliable approach using tools with a strict schema.

Why the model responds slowly and what you can speed up

4 min · · производительность

A request takes tens of seconds instead of the usual two or three. Here is what is and isn't in your control, and where the real bottleneck usually is.

403 model_not_allowed_for_key explained

4 min · · errors

The key works, the balance is fine, and the model still returns 403. Here is how per-key model allowlists work and how to fix them.

422 idempotency_conflict: what it means and how to fix it

4 min · · errors

You retried a request with the same idempotency key but a different body, and got a 422 instead of the expected replayed response. Here is why.

Estimating request cost upfront with count_tokens

4 min · · API

Before burning balance on a long prompt, you can check its token count for free. Here is how, in one request.

allowed_models: restricting a key to only the models it needs

3 min · · API keys

A key that can call any model in the catalogue is more freedom than an integration needing exactly one model should have. Here is the allowed_models setting.

Setting daily and monthly spend limits on an API key

4 min · · API keys

One compromised or misconfigured key shouldn't be able to burn through your whole balance in an hour. Here is how to cap that from the dashboard.

The X-Zukko-Cache response cache: when a request is free

5 min · · API

The same request from the same user shouldn't be billed twice. Here is how the cache turns on and how to check whether it actually fired.

Idempotency-Key: retrying requests without paying twice

4 min · · API

A client-side timeout doesn't mean the request never ran on the server. The Idempotency-Key header solves that without manually checking usage history.

The model_retired error: when a model gets retired

4 min · · errors

A model that worked yesterday answers with 400 and code model_retired today. Here is what that means and how to handle it in code instead of by hand.

Running Claude Code with several accounts and keys at once

4 min · · Claude Code

Running Claude Code across several clients or projects isn't about switching accounts — it's about separate keys with separate limits on the same gateway.

Why the price through a gateway is lower than official — how it works

5 min · · бизнес

It isn't a discount for the sake of a discount — three concrete mechanisms remove extra cost from the chain: pay-as-you-go billing, caching, and local payment rails.

How to verify your API billing yourself

5 min · · API

No need to take billing on faith — the cost of every request is right there in the response headers, and the full spend history is one paginated call away.

Why Russian text tokenizes differently than English

4 min · · models

The same sentence in Russian and English isn't billed the same — not because of markup, but because the tokenizer splits Cyrillic differently.

Claude or GPT for a tool-using agent — how to choose

4 min · · models

Both lineups have vision, extended thinking and a 1M context window — the real difference is how each API shapes tool calls and what happens when a loop step fails.

Multiple projects, one account: staying organized

4 min · · API keys

One account balance, five projects drawing from it. How to organize that so month-end shows who spent what, instead of one lump sum to puzzle over.

Why you should set up a separate API key per project

5 min · · API keys

One key across every project saves five minutes now and creates a mess at the first incident. Here's what separating keys by project actually gets you.

Real-time spend monitoring from response headers

4 min · · API

You don't need to wait for a daily report to know what a request cost — the price and the remaining balance arrive in the headers of every non-streaming response. Here's how to use that.

Storing API keys safely: practices, not just advice

4 min · · security

Everyone's heard "don't commit keys to git." Here's what comes after that: per-key limits, model restrictions, and an actual plan for when a key leaks anyway.