Base URLs
The one setting that trips everyone up: which URL each client expects, with and without the /v1 suffix.
Almost every failed integration is a base-URL mistake. This page is the reference for exactly what to set.
The rule
| Client | Set base URL to | Then it calls |
|---|---|---|
| Anthropic SDK (Python / TS) | https://aiprimetech.io | https://aiprimetech.io/v1/messages |
| Claude Code | https://aiprimetech.io | https://aiprimetech.io/v1/messages |
| OpenAI SDK (Python / TS) | https://aiprimetech.io/v1 | https://aiprimetech.io/v1/chat/completions |
| LangChain / LiteLLM / Cursor | https://aiprimetech.io/v1 | https://aiprimetech.io/v1/chat/completions |
Anthropic clients: no
/v1. OpenAI clients: with /v1. The Anthropic SDK appends /v1/messages to whatever base you give it; the OpenAI SDK appends only /chat/completions. Adding /v1 to an Anthropic base produces requests to /v1/v1/messages, which 404s.How to tell which mistake you made
| You see | Meaning |
|---|---|
404 and the path contains /v1/v1/ | You added /v1 to an Anthropic-style base URL. Remove it. |
404 on /chat/completions with no /v1 | You omitted /v1 from an OpenAI-style base URL. Add it. |
404 on /v1/chat/completions from an Anthropic tool | The tool speaks Messages, not Chat Completions. Use the Anthropic base and endpoint. |
| Connection works but every call 401s | Right URL, wrong auth header for that format. See Authentication. |
Verifying without any SDK
This is the fastest way to prove the URL and key are right before blaming your framework:
"c"># should return JSON with a "data" array of model ids
curl -s -o /dev/null -w "%{http_code}\n" https://aiprimetech.io/v1/models \
-H "Authorization: Bearer $CLAUDEAPIKEY"
A 200 means URL and key are both correct, and any remaining problem is in your client configuration.