> Markdown mirror of https://router.one/blog/trae-vs-qoder-vs-codebuddy for AI assistants and crawlers. Router One is a unified, OpenAI-compatible LLM API gateway.
> Published: 2026-09-29 · Author: Router One Team

# TRAE vs Qoder vs CodeBuddy: AI IDEs on Your Own API Key

_TRAE, Qoder and CodeBuddy on your own API key: where each takes a custom endpoint, which protocol it sends, the Router One URL, and what skips your key._

TRAE, Qoder and CodeBuddy are the AI coding tools of ByteDance, Alibaba and Tencent, and all three let you add a model of your own next to the built-in ones. This post answers the same three questions for each: where does your own endpoint go, which protocol does the tool send, and which features never run on your key. It follows the international editions — docs.trae.ai, docs.qoder.com and codebuddy.ai — checked on 2026-09-29 against TraeCode 3.5.91, the Qoder desktop app 0.4.2 and CodeBuddy Code 2.159.0; every tool behavior below is as that tool's docs, release notes or source describe it. Router One's side is the same in all three: one `sk-` key, exact model IDs from [/models](https://router.one/models), and one entry per request in Dashboard → Logs with model, tokens, cost, status and request_id.

The verdicts. **TRAE**: Settings > Models > Add Model > Custom Model, in OpenAI Chat Completions format on `https://api.router.one/v1` or Anthropic Messages format on `https://api.router.one`, with Auto Mode switched off, because Auto Mode never calls custom models. **Qoder**: the desktop app takes a custom Base URL for personal-plan BYOK since 0.1.8; OpenAI Compatible, with Chat Completions API or Responses API, goes on `https://api.router.one/v1`, while Qoder IDE sticks to preset providers. **CodeBuddy**: one `models.json` entry per model, read by both CodeBuddy Code and CodeBuddy IDE, OpenAI format only, with `url` set to the full `https://api.router.one/v1/chat/completions`. Each of the three reaches every chat model in the catalog on one key. The editor plugins — the TraeCode Plugin, Qoder's JetBrains plugin and CodeBuddy's extensions — document no custom endpoint, except that TRAE Enterprise admins can let members add custom models in the TraeCode Plugin.

## Side by side

| Tool (version checked) | Where you add it | Protocol the tool sends | Router One address | Router One model IDs | Boundaries, per the docs |
| --- | --- | --- | --- | --- | --- |
| TRAE — TraeCode 3.5.91 | Settings > Models > Add Model > Custom Model | OpenAI Chat Completions or Anthropic Messages | Full URL off: `https://api.router.one/v1` (OpenAI format) or `https://api.router.one` (Anthropic format); Full URL on: `https://api.router.one/v1/chat/completions` or `https://api.router.one/v1/messages` | OpenAI format: every chat model; Anthropic format: Claude-family and DeepSeek V4 IDs | Auto Mode uses built-in models only; Max Mode's model table lists built-in models |
| Qoder — desktop app 0.4.2 (custom Base URL since 0.1.8) | Settings → Models → + Add → Provider → Custom | OpenAI Compatible (Chat Completions API or Responses API) or Anthropic Compatible | `https://api.router.one/v1` for both OpenAI Compatible types; Anthropic Compatible: path joining undocumented, no value given | Chat Completions: every chat model; Responses: GPT-family, DeepSeek V4 and Grok chat IDs | Personal-plan BYOK only; Repo Wiki runs on a fixed model billed in Qoder Credits |
| Qoder CLI 1.1.63 (personal-edition BYOK with custom URL endpoints since 1.1.50) | `/model` → Custom tab wizard | Set by the wizard | If the wizard asks for a Base URL: `https://api.router.one/v1` | Same model-ID rules as the desktop app | Providers come from your account's BYOK catalog; the docs say not to hand-edit `settings.json` |
| CodeBuddy — Code 2.159.0, IDE 4.12.1 | `~/.codebuddy/models.json` or `.codebuddy/models.json` in a project | OpenAI Chat Completions only | `url`: `https://api.router.one/v1/chat/completions` | Every chat model | Without `relatedModels`, background lite and reasoning requests run on the main model |

The Router One column follows the protocol, not the tool. `/v1/chat/completions` serves every chat model in the catalog — Claude, GPT, Gemini, Grok and DeepSeek IDs — so an OpenAI-format entry never has to change. `/v1/messages` serves Claude-family IDs and DeepSeek V4 (`deepseek-v4.1-flash`, `deepseek-v4-flash`); `/v1/responses` serves GPT-family IDs, DeepSeek V4 and Grok chat models. A mismatch fails before any model runs: a Claude ID sent to `/v1/responses` gets HTTP 400 `model '<id>' must be called via /v1/messages or /v1/chat/completions`, and a GPT, Gemini or Grok ID sent through an Anthropic-format entry gets a 400 that names `/v1/chat/completions`. Each model page lists its endpoints, and the [API compatibility fact sheet](https://router.one/facts/api-compatibility.md) has the accept and reject lists. Field-by-field forms, advanced settings and first-error fixes live in the three guides linked below, not here.

## TRAE: two API formats, a Full URL switch, Auto Mode off

TraeCode — the name TRAE's docs now give its IDE — adds a custom model under Settings > Models > Add Model > Custom Model: API Format, Custom Request URL with a Full URL switch, Model ID, Display Name and API Key, plus optional Advanced Settings. Custom request URLs arrived in TRAE 3.5.51 on 2026-04-14, per the [international changelog](https://docs.trae.ai/ide/changelog), so a tutorial that says TRAE has no base-URL field is out of date. With Full URL off, TraeCode appends the path for the chosen format to a base — the [model docs](https://docs.trae.ai/ide/models) use `https://api.openai.com/v1` and `https://api.anthropic.com` as examples — which makes Router One's values `https://api.router.one/v1` for OpenAI Chat Completions and `https://api.router.one` for Anthropic Messages. With it on, paste `https://api.router.one/v1/chat/completions` or `https://api.router.one/v1/messages`. Pick the format by model ID: OpenAI Chat Completions reaches every chat model, Anthropic Messages only Claude-family and DeepSeek V4 IDs. When you click Add Model, TraeCode checks the connection and adds the model only if the check succeeds.

Which modes use the custom model:

- **Auto Mode: no.** It picks among built-in models, and the [Auto mode docs](https://docs.trae.ai/ide/auto-mode) say it "will not use the custom models added by you". Switch it off in the model menu at the bottom right of the chat input and select your model by its display name. Check your plan first: TRAE's international [plans table](https://docs.trae.ai/ide/new-plans-and-billing) lists model selection on the Free plan as Auto mode only, while the paid plans add manual model selection.
- **Max Mode: no.** Its documented model table lists built-in models only.
- **CUE code completion: not documented.** The CUE docs don't mention custom models.
- **SOLO mode: yes.** Its docs say you can add custom models and use them in the built-in Agent.

Leave the Hyperparameters (Temperature, Top P, Top K) empty at first; empty means the model provider's defaults, and Anthropic's API returns HTTP 400 for non-default sampling values on Claude Opus 4.7 and later Opus models ([Opus 5.5 migration notes](https://router.one/blog/claude-opus-5-5-migration-guide)). TRAE's international billing docs meter each model request in Dollar Usage and don't mention custom models. The form, the Advanced Settings and the Add Model check, field by field: [TRAE + Router One](https://router.one/integrations/trae).

## Qoder: the desktop app takes a Base URL, Qoder IDE does not

Qoder's desktop app — also called New Qoder, a separate product since 2026-08-27 that runs alongside Qoder IDE — added custom Base URLs to personal-plan BYOK in 0.1.8 on 2026-09-05, per its [release notes](https://docs.qoder.com/release-notes/qoder). In Settings → Models → + Add, open Provider and pick OpenAI Compatible or Anthropic Compatible from the Custom group; OpenAI Compatible then asks for Chat Completions API or Responses API. Enter the Base URL, the key and one or more Model IDs. Qoder's example format, `https://api.example.com/v1`, has the same shape as `https://api.router.one/v1`, which serves both OpenAI Compatible types. The type applies to the whole entry, so keep Claude and Gemini IDs in a Chat Completions entry and add a Responses entry only for GPT-family, DeepSeek V4 or Grok chat IDs. Qoder's [custom models docs](https://docs.qoder.com/qoder/custom-models) don't say how Anthropic Compatible joins the Messages path onto the Base URL, so this post gives no value for it; Claude IDs reach the same models through Chat Completions.

The other Qoder products are narrower. Qoder IDE's BYOK uses preset providers, and its release notes through 1.32.0 (2026-09-23) don't mention a custom Base URL. The JetBrains plugin's notes add custom models with BYOK (2026-09-03) without saying whether an address can be entered. Qoder CLI 1.1.50 (2026-09-11) let personal-edition users add BYOK models with custom URL endpoints on the Custom tab of `/model`, but its docs describe that wizard only in outline and say not to configure BYOK by hand in `settings.json`, so treat the CLI as conditional. In mainland China the same line ships as Qoder CN — the renamed Tongyi Lingma — and its desktop app has the same custom Base URL form since 0.1.8. On cost, Qoder's docs say custom-model fees are settled by the model service's API account and do not use Qoder Credits; Repo Wiki runs on a fixed model and does. The capabilities step and validation errors: [Qoder + Router One](https://router.one/integrations/qoder).

## CodeBuddy: one models.json for the CLI and the IDE

CodeBuddy Code, Tencent's terminal agent (`npm install -g @tencent-ai/codebuddy-code`), and CodeBuddy IDE read custom models from the same files: `~/.codebuddy/models.json` for every project, and `.codebuddy/models.json` inside a project, which overrides entries with the same `id`. The [models.json docs](https://www.codebuddy.ai/docs/ide/Features/models) allow only the OpenAI interface format and require `url` to be the complete request path, typically ending in `/chat/completions`, so Router One's value is `https://api.router.one/v1/chat/completions`, the endpoint that serves every chat model, Claude included. Per the CodeBuddy Code 2.159.0 source, a custom model's url is normalized to end in exactly one `/chat/completions` but never gains a `/v1`, so the host root alone misses.

Two fields decide the bill. Set `maxInputTokens` at or below the context window on the model page, since the CLI compacts against it. And point `relatedModels.lite` at a cheaper ID in the same file, such as `anthropic/claude-haiku-4.5`: per CodeBuddy's docs, custom models don't inherit the product's default lite and reasoning variants, so without it the background summaries and Explore subagent requests run on the main model. CodeBuddy IDE 4.10.0 added creating a custom model from the chat input, but the docs don't describe that form's fields, so this post sticks to `models.json`. The full file, token limits and capability flags: [CodeBuddy + Router One](https://router.one/integrations/codebuddy).

## Plugins and IDEs with no documented custom endpoint

Per the docs checked on 2026-09-29, none of these documents a custom endpoint on a personal plan:

- **TraeCode Plugin** for VS Code and JetBrains IDEs (formerly MarsCode): the plugin docs list AI features but no model settings. TRAE Enterprise is the exception: its [model docs](https://docs.trae.ai/enterprise/model-settings) say that once an admin enables member custom models, members can add and use custom models in TraeCode and the TraeCode Plugin.
- **Qoder IDE**: BYOK through preset providers; no custom Base URL in its release notes through 1.32.0.
- **Qoder's JetBrains plugin**: custom models with BYOK since 2026-09-03, with no word on entering an address.
- **CodeBuddy's VS Code and JetBrains extensions**: the model settings in the plugin docs list built-in models only. The plugin can also connect a custom agent service you host, which is not a model URL.

"No word in the docs" is not proof that a feature is missing, only that there is nothing to cite; re-check after an update. For your own key inside VS Code or a JetBrains IDE today, the [editor BYOK roundup](https://router.one/blog/github-copilot-byok-vs-continue-vs-cline) and the [Cline, Cursor and Claude Code comparison](https://router.one/blog/cline-vs-cursor-vs-claude-code) cover editors that document it.

## Where the money goes: tool credits and your key

Each tool's own meter and Router One's bill are separate, and the docs are uneven about where they meet:

- **TRAE**: the international billing docs meter each model request in Dollar Usage at that model's list price and don't mention custom models.
- **Qoder**: custom-model fees are settled by the model service's account and don't use Qoder Credits; Repo Wiki, on its fixed model, does.
- **CodeBuddy**: the credits docs say different models consume different amounts and don't single out custom models.

On Router One's side, every request a tool sends with your key is billed at the model's posted rate and appears in Dashboard → Logs with model, input and output tokens, cost, status, total time and, for streamed requests that produced output, time to first token (TTFT). A request that runs on a built-in model — Auto Mode, a preset provider, a plugin — never reaches the gateway and never appears there, which is the quickest way to tell whether a tool is really using your model. Agent loops multiply requests: each tool round, retry or background summary is its own request, so give each tool its own key with a `maxSpend` cap. At the cap, requests on that key return HTTP 402 and your other keys keep working.

## How to choose

- **An IDE that speaks both protocols**: TRAE's TraeCode. An OpenAI-format entry covers every model, and Claude IDs can get an Anthropic-format entry of their own. Keep Auto Mode off.
- **Handing whole tasks to an agent**: the Qoder desktop app. Add a Responses entry if you want GPT-family IDs on `/v1/responses`.
- **A terminal, and a config file you can commit**: CodeBuddy Code's `models.json`, with `relatedModels.lite` set and `apiKey` written as `${ROUTER_ONE_API_KEY}`, which the CLI resolves at startup (never commit a literal key; CodeBuddy IDE does not resolve the reference). For other terminal agents on the same key, see [Goose, OpenCode, Qwen Code and Aider](https://router.one/blog/goose-vs-opencode-vs-qwen-code) and [Qwen Code + Router One](https://router.one/integrations/qwen-code).
- **Claude Code or Codex CLI**: the [CLI setup guide](https://router.one/docs/guides/cli-setup) covers both.

Create one key per tool at [router.one](https://router.one/) and cap each; [one gateway behind every coding tool](https://router.one/use-cases/ai-coding-tools) is the overview and [/integrations](https://router.one/integrations) lists every guide. A tool that still shows a connection error after the switch has not actually changed endpoint: start with [API connection troubleshooting](https://router.one/api-connection-troubleshooting), and decode status codes with the [error code page](https://router.one/llm-api-error-codes).

## FAQ

**Which of these AI IDEs can call my own API endpoint?**
TRAE's TraeCode, through a custom model with a request URL (since 3.5.51, 2026-04-14); Qoder's desktop app, through a custom Base URL for personal-plan BYOK (since 0.1.8, 2026-09-05); and CodeBuddy Code and CodeBuddy IDE, through the url field in models.json. Qoder IDE uses preset providers, Qoder CLI documents its custom-URL wizard only in outline, and the editor plugins document no custom endpoint (in TRAE Enterprise, an admin can let members add custom models in the TraeCode Plugin), per each vendor's docs checked on 2026-09-29.

**Should I use the OpenAI or the Anthropic format for Claude models?**
Either works on Router One: Claude-family IDs are served on both /v1/chat/completions and /v1/messages. TRAE offers both formats; in Qoder, use OpenAI Compatible with Chat Completions API, because the Anthropic Compatible path joining is undocumented; CodeBuddy's models.json takes the OpenAI format only. Never put a Claude ID in a Responses entry: /v1/responses rejects it with HTTP 400 before any model runs.

**Does a custom model still use the IDE's own credits?**
Qoder's docs say no, except Repo Wiki, which runs on a fixed model. TRAE's international billing docs and CodeBuddy's credits docs don't address custom models. On Router One, each request is billed on your key at the model's posted rate and listed in Dashboard → Logs.

**Why don't my requests show up in Router One's Logs?**
They never reached the gateway. The usual causes: TRAE's Auto Mode is on, and it only uses built-in models; a built-in or preset model is selected instead of your custom one; or the work ran in a plugin that has no custom endpoint. Select the custom model by its display name, send one plain message, then match it in Dashboard → Logs by time, model and request_id.

**Can one Router One key serve TRAE, Qoder and CodeBuddy at once?**
Yes, the same key works in every setup on this page. Still, give each tool its own key with a maxSpend cap: agent loops send many requests, and a key that reaches its cap returns HTTP 402 while the others keep working. Logs filter by key, so you can see what each tool spent.

**What happened to Tongyi Lingma?**
Alibaba Cloud renamed its Tongyi Lingma coding assistant to Qoder CN on 2026-05-20. The Qoder CN desktop app takes a custom Base URL for personal BYOK since 0.1.8, like Qoder's international desktop app, while Qoder CN IDE connects preset providers only, per the docs checked on 2026-09-29.

## See also

- Canonical page: https://router.one/blog/trae-vs-qoder-vs-codebuddy
- AI coding tools on one gateway: https://router.one/use-cases/ai-coding-tools
- Claude Code China: https://router.one/claude-code-china
- All blog posts: https://router.one/blog
- Models and per-model token rates: https://router.one/models (markdown: https://router.one/models.md)
- Pricing: https://router.one/pricing
- API docs (markdown): https://router.one/docs.md
- Company facts: https://router.one/facts/company.md
