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

ClientBase URL
Claude Codehttps://api.zukko.pro
Anthropic SDK (Python, TypeScript)https://api.zukko.pro
Cursorhttps://api.zukko.pro/v1
Codex, OpenAI SDKhttps://api.zukko.pro/v1
Continue, Cline and similar extensionshttps://api.zukko.pro/v1
curl by handthe 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

bash
curl -s -o /dev/null -w "%{http_code}\n" https://api.zukko.pro/v1/models

A 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.

Get API keyDocumentation

api.zukko.pro · fetch_*

Base URL with or without /v1: a client-by-client table · Zukko