How to choose a model gateway: what to look at
Six checks before you trust an intermediary with real traffic. Each takes a couple of minutes.
3 min · · Updated · pricing · choosing a model · setup
There are many model gateways, and they differ less in the models they carry than in what happens when something goes wrong. Below are checks worth running before you move real traffic. Each takes a couple of minutes and none require payment.
Is there a price list before registration
If prices appear only after you create an account, that is an answer in itself. The normal practice is a publicly available model list and prices. At Zukko /v1/models returns the identifiers, while prices and context are at /v1/models/info (and on the Models page in the dashboard).
curl https://api.zukko.pro/v1/models
curl https://api.zukko.pro/v1/models/infoWhile you are there, look at what the endpoints actually return: they should carry the identifiers you will put in your config and prices in comprehensible units.
Is the rate symmetric
With most providers, output tokens cost three to five times more than input. Intermediaries sometimes differ, and that changes the arithmetic.
The rule is simple: for agent workloads look at the input price, for chat workloads at the output. A flat rate favours agents; an asymmetric one favours short prompts with long answers.
Does billing match usage
The most important check, and it happens on your very first request.
The API returns the exact token count in the usage field:
"usage": {"prompt_tokens": 6499, "completion_tokens": 214}Make a request, note the numbers, open the usage history. Different figures there mean you can stop looking. If they match, also check whether failed requests are billed: a provider's error should not cost you money.
Is the protocol compatible
If the API matches the original, moving back costs a two-line edit. That is your insurance against the intermediary raising prices or disappearing.
Test it like this: take your existing code, change the base URL and key, run it. If anything else needed changing, compatibility is partial and the dependence is deeper than it looks.
What happens when the provider fails
Ask directly, or test it: what comes back when a model is unavailable. A good answer is a clear error with a code your code can act on. A bad one is someone else's message with someone else's support contacts — or worse, a 200 with an empty body.
Check streaming separately: at some gateways a streamed error arrives with a 200 status inside an event, and a naive client treats that as success.
Can you get your money back
A balance you cannot withdraw is not a balance, it is a prepayment with no obligations attached. Clarify the terms before putting in more than a trial amount.
And keep only what you can afford to lose on the account: a sensible habit with any intermediary is topping up as you spend rather than depositing a yearly budget at once.
A short checklist
| Check | How |
|---|---|
| Public price list | GET /v1/models/info or the Models page |
| Rate suits your load | compare input and output prices |
| Billing equals usage | reconcile the first request with the history |
| Failed requests are free | request a model that does not exist |
| Protocol is compatible | change the URL in your own code |
| Errors are legible | look at the response body during a failure |
Migrate in two steps: staging with a full real task first, production after. A short test request will not surface problems with long context, tools or streaming.
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
- opencode agents: setting up roles, models and toolsA custom agent in opencode is a role, a model and a set of permissions. A working config where a cheap model handles routine work and a stronger one edits code.
- OpenAI API Keys in the Open: Why You Should Not Use ThemWhere free keys on GitHub come from, why using them is dangerous for you and for the owner, and how to protect your own key from the same leak.
- GLM API Errors: Why the Request Fails and How to Fix ItA wrong model id, an overflowing 128K context, the key, the balance, limits: the typical causes of GLM API errors and a quick way to find yours.
- Plan mode in Claude Code: plan first, then edit the codeIn plan mode Claude Code reads your code and proposes a plan but edits nothing until you agree. How to enable it, use it and what it costs.