Inference APIs
Reference/Trackers

Which coding tools let you bring your own OpenAI-compatible endpoint

"OpenAI-compatible" is on every hosted model's front page, but whether a given coding tool can actually point at a custom endpoint, and what breaks when it does, varies a lot. This table is what we could verify from each tool's docs and issue tracker on 2026-09-18, with the highest-voted open requests linked. Corrections welcome by email.

Tool by tool

ToolCustom endpointWhereAPI it speaksKnown limits and open requestsWorking config
Codex CLIYes~/.codex/config.toml: [model_providers.x] with base_url, env_key, wire_apiResponses API (preferred) or chat completionsMCP servers are sent as type:"namespace" tools that non-OpenAI backends reject (#26234, ๐Ÿ‘48, our write-up); sub-agents send OpenAI-only items (#33551, write-up) and ignore model_provider (#40858); auto-review is pinned to an OpenAI model name (#24879)Guide
Codex desktop appPartlySame config file as the CLIResponses APICustom providers do not work with existing chats or the model picker; selecting one for a new thread can fail with "model is not supported when using Codex with a ChatGPT account" (#29156, ๐Ÿ‘33, open)CLI guide
opencodeYesopencode.json: provider.x.npm = "@ai-sdk/openai-compatible" + options.baseURLChat completionsModel limits (context, output) must be declared per model; a custom provider also sidesteps the Go-plan "hosted in China" prompt (#39845, ๐Ÿ‘30, write-up)Guide
VS Code, Copilot Chat BYOKYesManage Models โ†’ Custom endpoint (OpenAI-compatible), per-model entries with the base URL and keyChat completionsNo model discovery: every model is typed by hand (#319968, ๐Ÿ‘49); no BYOK in the Agents window over SSH (#325738, ๐Ÿ‘25); wish list in #325237, ๐Ÿ‘26Guide
WarpHosted onlySettings โ†’ search "inference endpoint": URL, API key, model idsChat completionsRequests are proxied through Warp's backend, so localhost and private URLs are rejected (#12142, ๐Ÿ‘38, open); no per-model context or temperature settings (#11963); not available to Cloud Agents; Warp cannot enforce retention terms for the upstream. Free and small-team plans qualify; larger organisations need BusinessA public endpoint such as ours works; use the model ids from the model list
ZedYessettings.json: language_models.openai_compatible.<name> with api_url and available_models; key in <NAME>_API_KEYChat completions (Responses by setting chat_completions: false)Set interleaved_reasoning: true for models that return reasoning_content, or the inline assistant breaks on thinking (#53135, ๐Ÿ‘10)Config below
CursorNot documentedOwn API keys for the providers Cursor lists; no custom base URL in the current docsโ€”Users asking for DeepSeek, Kimi and GLM inside Cursor are a recurring theme (76 titled issues since March); nothing official to point atโ€”
Claude CodeAnthropic API onlyANTHROPIC_BASE_URL + ANTHROPIC_AUTH_TOKEN + ANTHROPIC_MODEL, pointed at a server that speaks /v1/messagesAnthropic Messages APIA plain OpenAI-compatible endpoint does not work; the host has to implement the Messages API itself (373 titled issues since March about DeepSeek, Kimi or GLM in Claude Code). Ours does, and Claude Code 2.1.275 completed a real task on eight models through itGuide
GitHub Copilot in JetBrainsListed providers onlyBYOK for the providers the plugin lists; no custom endpoint fieldโ€”Custom endpoint requested in #1283, DeepSeek in #1709, ๐Ÿ‘12; both openUse Continue in JetBrains instead
ClineYesProvider "OpenAI Compatible": base URL, key, model idChat completionsDeclare context and output limits per modelGuide
ContinueYesconfig.yaml: provider openai with apiBaseChat completionsGuide
AiderYesOPENAI_API_BASE + OPENAI_API_KEY, model as openai/<id>Chat completionsModel metadata (context, price) comes from a local JSON you may need to addGuide
Open WebUIYesAdmin โ†’ Connections โ†’ OpenAI API: base URL and keyChat completions, audio, embeddingsGuide
n8nYesOpenAI credential with a custom base URLChat completionsGuide
Libraries (OpenAI SDKs, LiteLLM, LangChain, LlamaIndex, Vercel AI SDK)Yesbase_url / provider configChat completions, Responses, embeddingsLiteLLM: inferenceapis/<model> once #41669 mergesAll guides

What the endpoint has to get right

Speaking /v1/chat/completions is the easy half. The tools above also depend on details that "compatible" does not promise, and most reported failures come from these:

  • Streaming tool calls. Arguments arrive as delta.tool_calls fragments and must reassemble into valid JSON. Every agent needs this.
  • The Responses API for Codex, which only speaks it, including function_call_output replays and Codex's own namespace tools.
  • Replaying history without reasoning_content. Most tools drop it; hosts that require it back fail the second turn (details).
  • Unknown OpenAI-only fields. safety_identifier, store, metadata arrive from clients whether you want them or not (details).
  • Tools with no parameters and forced tool_choice, which trips grammar compilers when {} becomes [] somewhere in the chain (details).
  • A /v1/models list that includes every id you accept, because several tools validate the model name against it.

We test all of these against every chat model we serve and publish the results, failures included, on the model capabilities page.

Zed: the config the docs describe

Zed ยท settings.json
{
  "language_models": {
    "openai_compatible": {
      "inferenceapis": {
        "api_url": "https://api.inferenceapis.com/v1",
        "available_models": [
          { "name": "deepseek-ai/DeepSeek-V4-Flash", "display_name": "DeepSeek V4 Flash", "max_tokens": 1000000,
            "capabilities": { "tools": true, "interleaved_reasoning": true, "parallel_tool_calls": true } },
          { "name": "zai-org/GLM-5.3", "display_name": "GLM 5.3", "max_tokens": 1000000,
            "capabilities": { "tools": true, "interleaved_reasoning": true } },
          { "name": "moonshotai/Kimi-K2.7-Code", "display_name": "Kimi K2.7 Code", "max_tokens": 262144,
            "capabilities": { "tools": true, "interleaved_reasoning": true } }
        ]
      }
    }
  }
}

Export INFERENCEAPIS_API_KEY before starting Zed; the variable name is derived from the provider key. interleaved_reasoning: true tells Zed to expect reasoning_content, which all three models return. We have not run Zed end to end ourselves yet; the fields are from Zed's documentation as of 2026-09-18.

Warp: what works and what does not

Warp added custom inference endpoints in May 2026 (Settings, search "inference endpoint"). The client sends your endpoint URL, key and prompt to Warp's backend, which makes the request, so two things follow: private and localhost URLs are refused, which is the open issue with the most votes, and Warp's own privacy terms apply to the prompt in transit. A public endpoint works. Ours takes the model ids from the model list; per-model settings such as context length are not configurable in Warp yet.

Claude Code

Claude Code talks to the Anthropic Messages API and nothing else. Pointing ANTHROPIC_BASE_URL at a plain OpenAI-compatible endpoint does not work; the host has to implement /v1/messages itself, including the streaming events, tool_use and tool_result blocks and thinking blocks. This endpoint does (https://api.inferenceapis.com/v1/messages), so the change is three environment variables. Claude Code 2.1.275 ran a fix-the-tests task end to end on eight models through it on 2026-09-18; the timings, costs and the gotchas are in the Claude Code guide.