Use apimodels in any AI client
We expose the standard OpenAI surface (/v1/chat/completions and /v1/models), so any client that supports a "custom OpenAI provider" — Cherry Studio, Cursor, ChatBox, LobeChat, NextChat — connects with a single API key and gets every model (GPT-6.1 Sol, Claude, Gemini, GLM, …). Usually a one-minute setup. Image, video and audio models use their own task endpoints (see the respective docs pages) with the same key.
Three values — the same in every client
| Base URL / API host | https://api.apimodels.app/v1 |
| API Key | your sk_… key (create in console) |
| Model id | gpt-5.6-sol · gpt-6.1-sol · claude-opus-5-5 · gemini-3-pro-preview · gpt-image-2 |
No key yet? Open Console → Chaves de API and create an sk_… string.
Per-client setup
Cherry Studio
Detailshttps://api.apimodels.app/v1/Settings → Model Providers → Add, type OpenAI. The host must end with a slash.
Cursor
https://api.apimodels.app/v1Settings → Models → enable "Override OpenAI Base URL" with the host above, paste your sk_… key, then add a custom model name (e.g. gpt-6.1-sol).
ChatBox
https://api.apimodels.app/v1Settings → pick "OpenAI API Compatible", set the API host above, paste your sk_… key, model gpt-6.1-sol.
LobeChat
https://api.apimodels.app/v1Settings → Language Model → OpenAI, fill API Key and the API proxy address above, model gpt-6.1-sol.
NextChat
https://apimodels.appSettings → Custom Endpoint, set the endpoint to https://apimodels.app (it appends /v1 itself), API Key your sk_… key, model gpt-6.1-sol.
Any OpenAI-compatible app / SDK
https://api.apimodels.app/v1Set base_url to the host above, api_key to your sk_… key, model to gpt-6.1-sol. OpenAI SDK example below.
Want images inside the chat window?
The setup above covers chat only. Image, video and speech models have their own task endpoints rather than /v1/chat/completions, so a base URL alone will not reach them. To use them inside a conversation, install our MCP server — one npx command, works in Claude Desktop, Cursor and Cherry Studio, same key. The assistant then writes the prompt, generates, looks at the result and regenerates until it matches.
Coding agents
These tools read and write files on your machine and run commands, so pick a model that supports function calling (tools) — with one that does not, the agent stalls at the read step without erroring. Each row below states which wire protocol it uses: the three differ, and so do their base URLs, so do not copy the host from the chat-client section.
Claude Code
Detailshttps://api.apimodels.appSet three env vars: ANTHROPIC_BASE_URL, ANTHROPIC_AUTH_TOKEN, ANTHROPIC_MODEL. Note the host is the bare domain with no path — Claude Code appends /v1/messages itself.
Codex CLI
Detailshttps://api.apimodels.app/v1Add a model_provider in ~/.codex/config.toml with wire_api = "responses" (not chat). These two models are only served on the Responses API.
Cline / Roo Code (VS Code)
https://api.apimodels.app/v1Pick "OpenAI Compatible" as the API Provider, fill in the Base URL and API Key, type the Model ID by hand. Choose a tool-capable model — these extensions edit files through function calls, and a model without tools will stall at the read step.
Gemini CLI
Detailshttps://api.apimodels.appSet GOOGLE_GEMINI_BASE_URL (bare domain, no path) and GEMINI_API_KEY; on first launch pick “Use Gemini API key” as the auth method, not Google account login.
OpenClaw
Detailshttps://api.apimodels.app/v1Add a custom provider under models.providers in ~/.openclaw/openclaw.json (api: "openai-completions"); every model you want must be listed in the models array or you get “model not allowed”.
Continue
https://api.apimodels.app/v1Add an entry under `models` in config.json: provider "openai", apiBase as on the left, apiKey your sk_… key, model the model ID.
Aider
https://api.apimodels.app/v1Set OPENAI_API_BASE and OPENAI_API_KEY, then start with `aider --model openai/claude-opus-5-5`. Keep the `openai/` prefix — that is how aider picks the protocol.
Code (OpenAI SDK)
Any project using the OpenAI SDK only needs base_url and api_key changed to point here — no other code changes.
from openai import OpenAI
client = OpenAI(
base_url="https://api.apimodels.app/v1",
api_key="sk_your_key_here",
)
resp = client.chat.completions.create(
model="gpt-6.1-sol",
messages=[{"role": "user", "content": "Reply with exactly: ok"}],
)
print(resp.choices[0].message.content)import OpenAI from "openai"
const client = new OpenAI({
baseURL: "https://api.apimodels.app/v1",
apiKey: "sk_your_key_here",
})
const resp = await client.chat.completions.create({
model: "gpt-6.1-sol",
messages: [{ role: "user", content: "Reply with exactly: ok" }],
})
console.log(resp.choices[0].message.content)Verificação rápida de 30 segundos
If a client won't connect, confirm the key + endpoint with curl first — this is exactly what clients hit on "check connection":
# confirm the endpoint + your key work (this is what a client hits on "check connection"):
curl -s https://api.apimodels.app/v1/models \
-H "Authorization: Bearer $APIMODELS_API_KEY" | head -c 300Common pitfalls
| Sintoma | Causa / correção |
|---|---|
| Connection check fails / no models | Host became …/api/v1/v1/…. Clients like Cherry Studio need the trailing slash (…/api/v1/); clients that append /v1 themselves (e.g. NextChat) take just https://apimodels.app. |
| HTTP 401 | Wrong or disabled key. Mint a fresh sk_… in the console and paste it again. |
| Picked a model but nothing / 400 Unknown model | Model id typo — use the dash form, e.g. gpt-6.1-sol, claude-opus-5-5. Full list at /v1/models. |
| Insufficient balance / 402 | You're only charged for successful requests; top up in the console. |