Docs
Integrations
Kunavo speaks two wire formats every serious client already supports, so integration is a base URL and a key rather than an SDK. Here is the per-client setup.
Kunavo is an independent, OpenAI-compatible AI API gateway: one API key and one pay-as-you-go balance reach Claude, GPT and image, video and audio models, with no per-provider account required. There is no Kunavo SDK to install: any client with a base-URL field works. Point an OpenAI-compatible client at https://api.kunavo.com/v1, or an Anthropic-style client at https://api.kunavo.com, and pass a Kunavo key.
/v1 on purpose: the OpenAI SDK wants it in base_url, and the Anthropic clients append /v1/messages themselves so they want the origin alone. Getting this backwards is the most common setup failure — see the ANTHROPIC_BASE_URL page. Each page below states which form that client wants, and the date its configuration was last checked against the client's own documentation.Coding agents, editors and CLIs
Every one of these has a field for a custom provider, and every one of them treats "OpenAI-compatible" or "Anthropic" as a protocol rather than a vendor — which is why a Claude model id typed into an OpenAI-compatible provider is the intended combination, not a workaround.
One models.providers entry in ~/.openclaw/openclaw.json — baseUrl https://api.kunavo.com, api "anthropic-messages" — puts an always-on OpenClaw agent on Claude; cacheRetention is set beside it, because a custom Anthropic endpoint gets no cache markers until it is.
A named provider in ~/.hermes/config.yaml — api https://api.kunavo.com, transport anthropic_messages, selected with provider: custom:kunavo — puts Hermes Agent on Claude over the Messages wire, where it sends its own cache markers and output limit.
Two environment variables — ANTHROPIC_BASE_URL and ANTHROPIC_AUTH_TOKEN — move Claude Code onto pay-as-you-go without changing the install.
Providers → Custom provider → OpenAI Compatible, base URL with /v1, and the Claude model id typed in — Kilo Code never learns which vendor is behind it.
Pick the OpenAI Compatible provider, paste the base URL and key, and set the model's context window and max output so Roo Code's own budgeting is right.
Cline's OpenAI Compatible provider takes a base URL, a key and a model id, plus the per-model prices it uses to show a running session cost.
A [model_providers.kunavo] block in ~/.codex/config.toml with env_key, so the key stays in the environment and never in the config file.
One provider block in opencode.json — @ai-sdk/openai-compatible for chat completions, @ai-sdk/openai when you want the /v1/responses surface.
CCR is a desktop app now, not a config.json: add Kunavo as a custom API endpoint, then let its routing rules send each request class to a different model.
A language_models.openai_compatible block in settings.json declares the endpoint and its models; the key goes in the Agent Panel UI, never in the file.
Continue's `openai` provider names a protocol, not a vendor: give it an apiBase and each model — chat, edit, autocomplete — is one entry in config.yaml.
OPENAI_API_BASE plus OPENAI_API_KEY, then `aider --model openai/<id>` — the prefix is what routes the id to your endpoint instead of Aider's provider table.
Add Kunavo as a Custom Configuration: service root as the endpoint, ANTHROPIC_AUTH_TOKEN as the auth field, Anthropic Messages native — so the Claude Code side needs no local routing.
No base_url option exists — the SDK spawns the Claude Code CLI and passes your whole environment through, so ANTHROPIC_BASE_URL routes it, or ClaudeAgentOptions(env=...) does it per client.
A Custom URL connection in Amp's Model Routing — API format chat-completions, base URL https://api.kunavo.com/v1, key as a bearer token — moves mapped models onto one key, on the tiers that have the option.
Four environment variables — COPILOT_PROVIDER_BASE_URL, COPILOT_PROVIDER_TYPE, COPILOT_PROVIDER_API_KEY and COPILOT_MODEL — move Copilot CLI onto your own endpoint, and GitHub documents that BYOK needs no GitHub login.
Crush's config is Bash — one `provider add kunavo --type openai-compat --base-url "https://api.kunavo.com/v1"` in a crushrc puts Charm's terminal agent on Claude and GPT.
Settings → Models → “Add model provider” → “Custom model API” takes five fields — Provider ID, display name, base URL, API protocol and API key — and puts Claude and GPT in the same picker as the built-in DeepSeek card.
Dyad takes any OpenAI-compatible endpoint through Settings → AI Providers → Add Custom Provider: API Base URL https://api.kunavo.com/v1, the key on the provider's own page, then one Add Custom Model row per model id.
A customModels entry in ~/.factory/settings.json — model, baseUrl and provider — puts Droid on any endpoint that speaks Anthropic Messages or OpenAI Chat Completions.
Settings → Models → Configure providers → OpenAI: Host URL takes the bare origin, because goose appends the request path (v1/chat/completions) itself.
One `jan config set --base-url https://api.kunavo.com/v1` line writes Kunavo into ~/.jan/config.toml, and the Jan Agent preview CLI — which ships no inference engine — runs on that key.
Junie CLI takes a custom endpoint as a JSON profile in $JUNIE_HOME/models/, where baseUrl is the complete endpoint URL and fasterModel decides where its helper traffic lands.
Kimi Code keeps providers in ~/.kimi-code/config.toml — set providers.<name>.base_url to https://api.kunavo.com/v1 with type = "openai" and the CLI runs Claude and GPT ids on one key.
mini-SWE-agent has no base-URL environment variable — the endpoint goes under model.model_kwargs.api_base in a YAML config, which mini hands straight to litellm.completion.
A five-line [[providers]] block in .vibe/config.toml — api_base, api_key_env_var, api_style — points Vibe CLI at Kunavo, with the key living in an environment variable rather than the file.
Settings > Model Providers takes a Base URL and an API key — five documented fields, two of which Msty Go's own docs leave you to settle by test.
A Custom Provider entry under nanocoder.providers in agents.config.json — name, baseUrl, apiKey, models — with no sdkProvider line needed, since it defaults to openai-compatible.
A provider block in ~/.omp/agent/models.yml — baseUrl, api, apiKey — points Oh My Pi at Kunavo, and discovery fills the model list from GET /v1/models.
One [model_providers.kunavo] table in ~/.openinterpreter/config.toml — base_url, env_key, wire_api = "chat" — and the Rust terminal agent runs on any model the key reaches.
Settings → LLM → Advanced takes three fields — Custom Model, Base URL, API Key — with the model id carrying an openai/ prefix and the base URL keeping its /v1.
A custom provider block in ~/.pi/agent/models.json — baseUrl, api and the model ids — puts Earendil's Pi terminal coding agent on Claude and GPT through one key.
Qoder Settings → Models → + Add → Provider → Custom takes an OpenAI-compatible Base URL, an API Key and hand-typed Model IDs — so the standalone Qoder desktop app reaches Claude and GPT, neither of which is in its own catalogue.
Qwen Code reads its endpoints from modelProviders in ~/.qwen/settings.json — one entry with a baseUrl and an envKey puts Claude and GPT in its /model picker.
One entry in ai-features.openAiCustom.customOpenAiModels — model, url and apiKey — puts Kunavo behind Theia Coder, the Architect and inline completion.
twinny has no base-URL field — Add provider → OpenAI-compatible server, then Protocol https, Hostname api.kunavo.com, Port blank and API path /v1, and its chat panel is on your key.
Chat clients and self-hosted UIs
Desktop apps and self-hosted front-ends, where the draw is one key and one balance behind a single model picker rather than an account per vendor.
One OpenAI connection under Admin Settings, or OPENAI_API_BASE_URL and OPENAI_API_KEY at container start — both end at the same /v1.
Settings → Model Services → a custom provider: paste the key and the API address, click Get Model List, and the whole catalog fills the picker.
Add a provider of type OpenAI API Compatible with the API Host set to the service root — Chatbox appends /v1/chat/completions itself.
Three environment variables — OPENAI_API_KEY, OPENAI_PROXY_URL and OPENAI_MODEL_LIST — put Claude and GPT in one self-hosted LobeChat picker.
Point SillyTavern's Chat Completion source at Kunavo with a custom endpoint and one API key — Claude and GPT in the same model dropdown.
API Settings → Proxy → Add Configuration: the Proxy URL is the full /v1/chat/completions path, and the Model Name has to be a catalog id exactly.
Ollama's OpenAI-compatible surface and Kunavo's are the same shape, so tools written for a local Ollama swap over by changing the base URL.
AnythingLLM reaches an endpoint it ships no named provider for through the one called Generic OpenAI — Base URL with /v1, a key, and a model id you type yourself, since it fetches no list.
Settings → Providers → "+" builds a custom provider from three fields — Provider name, API Base URL set to https://api.kunavo.com/v1, and API Key — then Fetch reads the model list off the endpoint.
One required field — API Base URL, in the OpenAI-API-compatible plugin's Add Model form — points every LLM node in a Dify workspace at Kunavo.
LibreChat takes a gateway as an endpoints.custom block in librechat.yaml — four required fields, the key from .env, and a restart before the picker shows it.
Model Hub > Model Providers > Add Provider > Open AI Compatible: an API Key and an Inference Endpoint of https://api.kunavo.com/v1 — the app's own note says most OpenAI-compatible endpoints need the /v1.
The OpenAI credential's Base URL field — https://api.kunavo.com/v1, keeping the /v1 — puts every OpenAI Chat Model in an n8n workflow on Kunavo; the model node itself has no endpoint field.
Three environment variables — OPENAI_API_KEY, BASE_URL (bare origin) and CUSTOM_MODELS — put a self-hosted NextChat on Claude and GPT through one key.
Settings → Copilot → BYOK → Add a custom provider: a Display name, your key and https://api.kunavo.com/v1 — Quick Chat always, Agent Chat under opencode when the provider is shown there.
Settings → OpenAI Compatible API → Add Provider → Custom: Provider Name, a Base URL that keeps /v1, and the key — then tick model ids from the list Page Assist fetches for itself.
Models → Add custom model: the full Endpoint URL https://api.kunavo.com/v1/chat/completions, an Authorization header with Bearer and your key, the Model ID and its context length — one entry per model, called straight from your browser.
Anything else
A client not listed here almost certainly still works. The test is whether it lets you change the endpoint: if it has a "base URL", "custom endpoint" or "OpenAI-compatible provider" setting, Kunavo drops in. Start with the quickstart, then chat completions or the Messages API depending on which format the client speaks. Model ids come from GET /v1/models, which is also what populates the model dropdown in clients that have one — and the full machine-readable contract is the OpenAPI 3.1 description, which most client generators and agent frameworks can consume directly.