Roo Code takes a custom endpoint through its OpenAI Compatible provider: a Base URL, an API Key, a Model id, and a Model Configuration block it cannot fill for a model it does not know. This page fills that block from the live catalog, one profile per mode, and an uncensored build answers in Code, Ask, Architect and Debug with tool calls for edits and commands. The same ids work in Cursor and OpenCode, and through a router in Claude Code.
Where the settings are
Open the Roo Code panel in VS Code and click the gear icon at the top of it; the Providers tab opens. Everything on this page lives there: the API Provider dropdown, the fields under it, and the Model Configuration section for the custom model. Roo Code has no config file for providers. The Export button at the bottom of the settings writes roo-code-settings.json with the key in plaintext, so treat that file like the key itself.
The settings sit in a profile. The profile selector is at the top of the Providers tab, the same list shows as the API Configuration dropdown in the chat, and each mode (Code, Ask, Architect, Debug, Orchestrator) remembers the profile you last used in it. Orchestrator subtasks inherit the parent task's profile, and a task resumed from history keeps the profile it started with even after you switch the global selection.
Steps
- Create a key in the console.
- In the Providers tab, click + next to the profile selector and name the profile, for example
UncensoredLLM Code. - Set the four fields. The Model field is preset to an OpenAI id; replace it.
API Provider OpenAI CompatibleBase URL https://api.uncensoredllm.ai/v1API Key sk-ullm-live-…Model glm-5.3-uncensored- Once Base URL and API Key are in, Roo Code reads the model list from the API, so the ids appear in the Model picker; typing one works too. Any id on the models page goes in, exactly as the page spells it. The three Roo Code users call most here:
glm-5.3-uncensoredglm-5.3-flash-uncensoreddeepseek-v4.1-flash-abliterated- Fill Model Configuration for the id you chose. Roo Code knows nothing about a custom model, so these fields set the context it keeps, the output cap it sends and the cost it shows. The values below are read from the live catalog at render; copy the row for your id.
| Model | Context Window Size | Max Output Tokens | Input Price | Output Price | Image Support |
|---|---|---|---|---|---|
glm-5.3-uncensored | model page | model page | 0.282 | 0.846 | model page |
glm-5.3-flash-uncensored | model page | model page | 0.1053 | 0.3685 | model page |
deepseek-v4.1-flash-abliterated | model page | model page | 0.8488 | 1.6975 | model page |
- Leave the checkboxes at their defaults: Enable streaming on, Include max output tokens on, Use Azure off, Enable R1 model parameters off, Prompt Caching off, Enable Reasoning Effort off. Custom Headers stays empty; the API needs none.
- Close the settings and send a message in Code mode. The API Configuration dropdown under the chat input shows the profile; the mode selector to its left switches modes, as do
/code,/ask,/architectand/debugat the start of a message.
One profile per mode is the usual setup: a strong build in a profile for Code and Debug, a fast one in a second profile for Ask and Architect. Make the second profile with + again, the same Base URL and API Key, another id and its Model Configuration row. Roo Code keeps the last profile used in each mode, and the Prompts tab pins one to a mode outright. A task resumed from history keeps the profile it started with.
What each setting does
- API Provider
- OpenAI Compatiblethe provider type that takes a base URL; the plain OpenAI entry has no URL field
- Base URL
- https://api.uncensoredllm.ai/v1where every request goes; the /v1 at the end matters, Roo Code appends /chat/completions and /models
- API Key
- the whole sk-ullm- keysent as the bearer token; stored in VS Code Secret Storage, never shown again in the UI
- Model
- glm-5.3-uncensoredthe id in every request; picked from the list the API returns or typed, exactly as the models page spells it
- Context Window Size
- from the table abovetotal tokens the model takes; Roo Code trims and condenses the task against this number
- Max Output Tokens
- from the table abovethe cap Roo Code sends with Include max output tokens on; -1 lets the server set it
- Input Price / Output Price
- from the table aboveUSD per million tokens; only the cost estimate in the chat reads them, the bill is the console
- Image Support
- on or off per the tablewhether Roo Code attaches screenshots and pasted images to requests
- Computer Use
- offthe browser tool; the docs list it under Model Configuration, leave it off for a text build
- Prompt Caching
- offreveals Cache Reads Price and Cache Writes Price for the estimate; the console counts cached tokens either way
- Enable streaming
- ontokens arrive as the model writes them; off, Roo Code waits for the whole answer
- Enable R1 model parameters
- offthe R1 message format for reasoning models of that family; none of the ids here need it
- Use Azure
- offAzure URL and api-version handling; not this API
- Custom Headers
- noneextra headers on each request; the key already travels in Authorization
- Rate Limit
- 0minimum seconds between requests for this profile; 0 disables it
Picking a model
Roo Code sends OpenAI-format requests, and every build on the models page answers in that format. The agent loop runs on native tool calling only, with no XML fallback, so the build has to take tool calls; the last column says which do, and the model page says for the rest. A turn late in a task carries the conversation, the files Roo Code read and every tool result so far, so input tokens are most of the bill and a build with a low input price costs the least per turn.
| Model | One agent turn | Tool calls |
|---|---|---|
| GLM-5.3 Uncensored | $0.01 | model page |
| GLM-5.3 Flash Uncensored | $0.0047 | model page |
| DeepSeek V4.1 Flash Abliterated | $0.04 | model page |
| DeepSeek V4 Pro Uncensored | $0.04 | model page |
| GLM-5.3 Abliterated | $0.09 | model page |
| GLM-5.3 Flash Code Uncensored | $0.25 | model page |
| GLM-5.3 Uncensored | Uncensored | $0.282 | $0.846 |
| GLM-5.3 Flash Uncensored | Uncensored | $0.1053 | $0.3685 |
| DeepSeek V4.1 Flash Abliterated | Abliterated | $0.8488 | $1.6975 |
| DeepSeek V4 Pro Uncensored | Uncensored | $0.97 | $1.94 |
| GLM-5.3 Abliterated | Abliterated | $2.1825 | $4.365 |
| GLM-5.3 Flash Code Uncensored | Uncensored | $6.00 | $6.00 |
By mode: Code and Debug send the most tool calls and the longest contexts, so they get the strong build. Ask reads and explains, and Architect writes a plan before any edit; both run well on the fast build, and the per-turn figure above is what each mode's profile costs when the task is deep. Orchestrator subtasks inherit the parent task's profile, so start an Orchestrator task on the profile you want the whole tree to bill to.
Roo Code's own cost figure next to each request is an estimate from the Input Price and Output Price you typed; the console's usage page is the charge. For the code builds side by side, the uncensored coding AI guide costs a full coding day on each.
Check it
List the models your key can call. This is the same request Roo Code makes to fill the Model picker, so the id you chose should be in the answer:
curl https://api.uncensoredllm.ai/v1/models -H "Authorization: Bearer sk-ullm-live-…"Then send one request the way Roo Code does. -i prints the headers: x-uplink-request-id names the request, and on a non-streamed answer x-uplink-charge is what it cost in USD.
curl -i https://api.uncensoredllm.ai/v1/chat/completions \ -H "Authorization: Bearer sk-ullm-live-…" \ -H "Content-Type: application/json" \ -d '{"model": "glm-5.3-uncensored", "messages": [{"role": "user", "content": "Reply with the single word ok."}]}'In Roo Code, send a message in Code mode with the profile selected. The request shows on the console's usage page with its tokens and its charge; the token counts in Roo Code's chat history should match.
Errors and fixes
401 invalid_api_key(Roo Code's "Invalid API Key"): the key is wrong or revoked, or the profile in use is not the one you set up. Check the API Configuration dropdown under the chat, then copy the key again from the console.404 model_not_found(Roo Code's "Model Not Found"): the Model field still holds the preset OpenAI id, or the id is misspelled. Pick it from the list or paste it from the models page.402 insufficient_balance: the balance does not cover the request. Top up in the console.402 monthly_limit_reachedmeans the key hit the monthly spend limit you set on it.403 scope_denied: the key is limited to certain models and this is not one of them.429 rate_limited: the key hit its rate limit. The response carriesretry-after; the profile's Rate Limit setting spaces Roo Code's requests by that many seconds.- Connection errors with no status code: the Base URL is wrong. It is
https://api.uncensoredllm.ai/v1with the/v1, nothing after it, and Use Azure is off. - Tool-calling errors, or Roo Code answering in prose where it should edit a file: the build does not take tool calls. Switch to one the table marks yes, or whose model page lists them; Roo Code has no XML fallback.
400on every request: Max Output Tokens is above what the model allows, and Include max output tokens sends it as the cap. Set the value from the table, or -1 to let the server choose. Enable R1 model parameters turned on for a model that is not of that family gives the same result; turn it off.- The Model picker is empty: Roo Code could not read the model list, usually because the key or URL was not saved yet. Reopen the settings after saving; the Refresh Models hint says the same.
- Context trimmed too early or too late: Context Window Size is wrong for the model. Roo Code condenses the task at a share of this number, so copy it from the table.
Questions
Every model on the models page: all of them answer /v1/chat/completions in the OpenAI format with the same key, so any id there goes into the Model field as the page spells it. The ones marked yes under Tool calls also run the agent loop. See the models page.
The API takes the same request shape as OpenAI’s chat completions endpoint: the same paths, the same bearer key header, the same messages and tools fields, the same streamed chunks. Roo Code’s OpenAI Compatible provider sends that shape to whatever Base URL you give it, which is why one URL and one key are the whole setup.
In VS Code’s Secret Storage, per profile; the settings UI never shows it again. The Export button writes it in plaintext into roo-code-settings.json, so keep that file out of the repository, and Reset clears it with everything else.
No. Use Azure changes the URL and version handling for Azure endpoints, and Enable R1 model parameters switches to the message format of that reasoning family; neither applies here. The only boxes that matter are the defaults: streaming on, max output tokens included.
Every model above is on the uncensored model list with its live price per million tokens. Per-token pricing sets the whole catalog side by side, and the family directory groups the builds by base model.