Base URL with or without /v1 — which client needs what
The same gateway needs different base URLs in different clients. Getting the suffix wrong yields a 404 with no useful explanation.
2 min · 8 September 2026 · setup · errors · cursor · claude-code
The single most common mistake when connecting to any API gateway is the /v1 suffix in the base URL. It produces a 404 whose wording gives no hint about the cause, and people spend half an hour suspecting their key.
Why clients disagree
It comes down to what each client considers the "base".
The Anthropic SDK, and Claude Code built on top of it, treat the service root as the base and append /v1/messages themselves. Give them a URL ending in /v1 and you get /v1/v1/messages.
The OpenAI SDK, and everything built on it — Cursor, Codex, many IDE extensions — treat the versioned prefix as the base and append only /chat/completions. Give them a URL without /v1 and you get /chat/completions at the root.
Both mistakes look identical: a 404 from a server that simply does not know that path.
The table
| Client | Base URL |
|---|---|
| Claude Code | https://api.zukko.pro |
| Anthropic SDK (Python, TypeScript) | https://api.zukko.pro |
| Cursor | https://api.zukko.pro/v1 |
| Codex, OpenAI SDK | https://api.zukko.pro/v1 |
| Continue, Cline and similar extensions | https://api.zukko.pro/v1 |
| curl by hand | the full path: https://api.zukko.pro/v1/messages |
An easier rule to remember: if the client calls itself Anthropic-compatible, drop /v1; if OpenAI-compatible, keep it.
Telling the errors apart
Make a request and read the response.
A 404 about an unknown path is almost certainly the suffix. Check the URL.
A 404 about a model (The model ... does not exist) means the URL is right — you reached the service — but you asked for a model that is not in the catalogue. That is a different problem.
A 401 means the URL is right and the key is at fault.
So the text of the 404 distinguishes one failure from the other without guesswork.
A quick URL check
curl -s -o /dev/null -w "%{http_code}\n" https://api.zukko.pro/v1/modelsA 200 confirms the service is reachable and that the versioned prefix is /v1. All that remains is whether your client appends that prefix itself — check its documentation, or simply try both, which takes a minute and costs nothing.
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.