---
title: "Continue.dev OpenAI compatible provider: uncensored models"
canonical: https://uncensoredllm.ai/guides/continue
generated: 2026-11-09T16:02:05.515Z
source: https://uncensoredllm.ai/guides/continue
base_url: https://api.uncensoredllm.ai/v1
---

# Continue with an uncensored model

One models entry in config.yaml: provider openai, the base URL, the key from a secret, tool_use for Agent mode. The same file drives the VS Code and JetBrains extensions and the cn CLI; the cost per agent turn and the errors.

Steps checked November 2, 2026 · prices as of November 9, 2026

Continue takes an OpenAI-compatible API as a model entry in `config.yaml`: `provider: openai`, a base URL, a key and the roles the entry serves. One block, and an uncensored build answers in Chat, edits inline and runs Agent mode in VS Code, JetBrains and the `cn` CLI. The same ids work in [Cursor](https://uncensoredllm.ai/guides/cursor), [OpenCode](https://uncensoredllm.ai/guides/opencode) and, through a router, in [Claude Code](https://uncensoredllm.ai/guides/claude-code).

## Where the settings are

Continue has no separate OpenAI-compatible provider. Per its docs, a server that answers the OpenAI format is set up as `provider: openai` with an `apiBase`, and that is what this API is. The settings live in `~/.continue/config.yaml` on macOS and Linux and `%USERPROFILE%\.continue\config.yaml` on Windows; Continue creates the file the first time it runs.

To open it from the IDE: open the Continue sidebar (`Cmd/Ctrl + L` in VS Code, `Cmd/Ctrl + J` in JetBrains), click the agent selector above the chat input, hover the agent and click the gear icon. The configs dropdown at the top right of the chat input has the same file behind the cog beside **Local Config**. The `cn` CLI reads the same file by default, so one edit covers the extension and the terminal.

`config.json` in the same folder is the older format and is deprecated in the docs; the YAML below is the current one, with the JSON shape shown once for a file that is still on it.

## Steps

1. Create a key in the [console](https://app.uncensoredllm.ai/console) and put it in `~/.continue/.env`, one line, no quotes:

```
UNCENSOREDLLM_API_KEY=sk-ullm-live-…
```

Continue resolves `${{ secrets.UNCENSOREDLLM_API_KEY }}` from that file. A project-only key goes in `.env` at the workspace root or in `.continue/.env` under it; the docs check those two first, then the global file, then the process environment. The last one is for the CLI only: the VS Code and JetBrains extensions cannot read shell variables.

1. Add these entries under `models:` in `config.yaml`, keeping the file’s `name`, `version` and `schema` lines as they are. The three ids are the ones Continue users call most here; any id on the [models page](https://uncensoredllm.ai/models) goes in the same way, with its display name from the catalog and its context length where the catalog publishes one:

```
models:
  - name: GLM-5.3 Uncensored
    provider: openai
    model: glm-5.3-uncensored
    apiBase: https://api.uncensoredllm.ai/v1
    apiKey: ${{ secrets.UNCENSOREDLLM_API_KEY }}
    roles: [chat, edit, apply]
    capabilities: [tool_use]
  - name: GLM-5.3 Flash Uncensored
    provider: openai
    model: glm-5.3-flash-uncensored
    apiBase: https://api.uncensoredllm.ai/v1
    apiKey: ${{ secrets.UNCENSOREDLLM_API_KEY }}
    roles: [chat, edit, apply]
    capabilities: [tool_use]
  - name: DeepSeek V4.1 Flash Abliterated
    provider: openai
    model: deepseek-v4.1-flash-abliterated
    apiBase: https://api.uncensoredllm.ai/v1
    apiKey: ${{ secrets.UNCENSOREDLLM_API_KEY }}
    roles: [chat, edit, apply]
    capabilities: [tool_use]
```

1. Save. The three names appear in the model selector of the chat input; pick one, then choose **Chat**, **Plan** or **Agent** in the mode selector below the input (`Cmd/Ctrl + .` cycles). **Edit** and **Apply** use the same entries through their roles.

To paste the key instead of using a secret, put the whole `sk-ullm-` key on the `apiKey` line; the docs show both forms. The same entry in the deprecated `config.json`, for one model, looks like this (`title` instead of `name`, no roles):

```
{
  "models": [
    {
      "title": "GLM-5.3 Uncensored",
      "provider": "openai",
      "model": "glm-5.3-uncensored",
      "apiBase": "https://api.uncensoredllm.ai/v1",
      "apiKey": "sk-ullm-live-…"
    }
  ]
}
```

In the terminal, `cn` starts with the same `config.yaml`; `cn --config` points it at another YAML file for one session and `/config` inside the TUI switches between the local configs it knows:

```bash
cn --config ~/.continue/config.yaml
```

## What each setting does

- name: the display name the label Continue shows for the entry; it has to be unique in the file
- provider: openai the request format; Continue speaks OpenAI chat completions to any apiBase under it
- model: glm-5.3-uncensored the id sent in each request, exactly as the models page spells it
- apiBase: https://api.uncensoredllm.ai/v1 where the requests go instead of OpenAI; ends in /v1, never in /chat/completions
- apiKey: ${{ secrets.UNCENSOREDLLM_API_KEY }} the whole sk-ullm- key, by secret name or pasted; sent as the bearer token
- roles: [chat, edit, apply] where the entry can be picked: chat and Agent, inline edits, applying a diff; autocomplete, embed and rerank are the other roles
- capabilities: [tool_use] tells Continue the model takes tool calls, which Plan and Agent need; it only adds to what Continue detects on its own
- defaultCompletionOptions: contextLength the window Continue budgets prompts against; maxTokens, temperature and stop go in the same map
- requestOptions: timeout, caBundlePath, headers per-model HTTP settings; the fix for a custom certificate authority lives here

## Picking a model

Continue sends OpenAI-format requests under `provider: openai`, and every build on the models page answers in that format. An Agent turn carries the conversation, the files Continue 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. The last column says whether the build takes native tool calls. Continue’s docs say it falls back to system-message tools for a model without them, so `capabilities: [tool_use]` stays on every entry either way.

| Model | One Agent turn | Tool calls |
| --- | --- | --- |
| [GLM-5.3 Uncensored](https://uncensoredllm.ai/models/glm-5.3-uncensored) | $0.01 | [model page](https://uncensoredllm.ai/models/glm-5.3-uncensored) |
| [GLM-5.3 Flash Uncensored](https://uncensoredllm.ai/models/glm-5.3-flash-uncensored) | $0.0047 | [model page](https://uncensoredllm.ai/models/glm-5.3-flash-uncensored) |
| [DeepSeek V4.1 Flash Abliterated](https://uncensoredllm.ai/models/deepseek-v4.1-flash-abliterated) | $0.04 | [model page](https://uncensoredllm.ai/models/deepseek-v4.1-flash-abliterated) |
| [DeepSeek V4 Pro Uncensored](https://uncensoredllm.ai/models/deepseek-v4-pro-uncensored) | $0.04 | [model page](https://uncensoredllm.ai/models/deepseek-v4-pro-uncensored) |
| [GLM-5.3 Abliterated](https://uncensoredllm.ai/models/glm-5.3-abliterated) | $0.09 | [model page](https://uncensoredllm.ai/models/glm-5.3-abliterated) |
| [GLM-5.3 Flash Code Uncensored](https://uncensoredllm.ai/models/glm-5.3-flash-code-uncensored) | $0.25 | [model page](https://uncensoredllm.ai/models/glm-5.3-flash-code-uncensored) |

40,000 input and 1,200 output tokens at the catalog prices on 2026-11-09. Tool calls as the catalog publishes them; where it does not, the model page says.

| Model | Build | Input $/M | Output $/M |
| --- | --- | --- | --- |
| [GLM-5.3 Uncensored](https://uncensoredllm.ai/models/glm-5.3-uncensored) glm-5.3-uncensored | Uncensored | $0.282 | $0.846 |
| [GLM-5.3 Flash Uncensored](https://uncensoredllm.ai/models/glm-5.3-flash-uncensored) glm-5.3-flash-uncensored | Uncensored | $0.1053 | $0.3685 |
| [DeepSeek V4.1 Flash Abliterated](https://uncensoredllm.ai/models/deepseek-v4.1-flash-abliterated) deepseek-v4.1-flash-abliterated | Abliterated | $0.8488 | $1.6975 |
| [DeepSeek V4 Pro Uncensored](https://uncensoredllm.ai/models/deepseek-v4-pro-uncensored) deepseek-v4-pro-uncensored | Uncensored | $0.97 | $1.94 |
| [GLM-5.3 Abliterated](https://uncensoredllm.ai/models/glm-5.3-abliterated) glm-5.3-abliterated | Abliterated | $2.1825 | $4.365 |
| [GLM-5.3 Flash Code Uncensored](https://uncensoredllm.ai/models/glm-5.3-flash-code-uncensored) glm-5.3-flash-code-uncensored | Uncensored | $6.00 | $6.00 |

Prices per million tokens, read from the live catalog on 2026-11-09.

The block gives each entry the `chat`, `edit` and `apply` roles, which cover Chat, Plan and Agent, the inline edit and the step that writes a proposed diff into the file. `autocomplete` is a separate role with its own prompt template and its own request shape; the docs’ own example pairs a chat model with a dedicated autocomplete model, and that split holds here. Leave these entries off `autocomplete` and keep whatever fills that role today. `embed` and `rerank` are indexing roles and stay where they are as well.

For coding specifically, [the uncensored coding AI guide](https://uncensoredllm.ai/guides/uncensored-coding-ai) compares the code builds and costs a full coding day on each. The same ids work in [Cursor](https://uncensoredllm.ai/guides/cursor) and [OpenCode](https://uncensoredllm.ai/guides/opencode) with their own settings.

## Check it

List the models your key can call; every id you put under `models:` should be in the answer:

```bash
curl https://api.uncensoredllm.ai/v1/models -H "Authorization: Bearer sk-ullm-live-…"
```

Then send one request the way Continue 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.

```bash
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 Continue, send a message in Chat with one of your entries selected, then switch to Agent and ask for a small edit. Agent asks before it runs a tool by default; the docs’ tool policies make a tool automatic or exclude it. Plan does the same with read-only tools, so it is the safe place to watch a new build read the repository before it changes anything. The requests show on the console’s usage page with their tokens and their charge.

## Errors and fixes

- `401 invalid_api_key`: the key is wrong or revoked, or the secret did not resolve. A key exported in the shell is invisible to the extensions; put it in `~/.continue/.env` under the name used in `${{ secrets.UNCENSOREDLLM_API_KEY }}`, or copy it again from the console.
- `404 model_not_found`: the `model` line is not an id on the models page. Check the spelling against the page; the id goes in `model`, not in `name`.
- `404` with no model in the message: `apiBase` is missing its `/v1`, or has `/chat/completions` appended. Continue adds the route itself; `apiBase` ends at `/v1`.
- `402 insufficient_balance`: the balance does not cover the request. Top up in the console. `402 monthly_limit_reached` means 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 carries `retry-after`.
- Plan or Agent greyed out with **Not Supported**: Continue did not detect tool support on the entry. The docs’ fix is `capabilities: [tool_use]` on the model, which the block above already has; a build whose model page says it takes no tool calls runs on Continue’s system-message tools instead.
- The entries are missing from the model selector: the configs dropdown is on another config. Switch it to **Local Config**, the one backed by `~/.continue/config.yaml`.
- `fetch failed` on a network with its own certificate authority: set `requestOptions.caBundlePath` on each entry to the exported CA file, per the FAQ in Continue’s docs.
- Requests arriving at `/completions` instead of `/chat/completions`: the entry carries `useLegacyCompletionsEndpoint: true`. Remove it; the API serves chat completions.

## Questions

### Which provider do I pick in Continue for an OpenAI-compatible API?

provider: openai, with apiBase set to the API’s /v1 URL. Continue has no separate OpenAI-compatible entry; its docs route every server that answers the OpenAI chat format through the openai provider and an apiBase override, and this API is one of them.

### Where does the Continue OpenAI-compatible API key go?

On the apiKey line of the model entry, either pasted in full or as ${{ secrets.NAME }} with NAME defined in ~/.continue/.env, a workspace .env or .continue/.env. Shell variables reach the cn CLI only; the VS Code and JetBrains extensions read the .env files.

### Do I need LiteLLM between Continue and this API?

No. The API already speaks the OpenAI format with its own key, so Continue connects to it directly with the entry above. A LiteLLM proxy only adds something when you route several providers behind one local URL. See the LiteLLM guide.

### Does Agent mode work with these models?

Yes. Agent and Plan need tool calls, so each entry carries capabilities: [tool_use]; the builds whose model page lists native tool support handle them directly, and Continue’s docs say the rest run on its system-message tools. The table above costs one Agent turn on each at the live price. See the models page.

Every model above is on the [uncensored model list](https://uncensoredllm.ai/models) with its live price per million tokens. [Per-token pricing](https://uncensoredllm.ai/pricing) sets the whole catalog side by side, and the [family directory](https://uncensoredllm.ai/uncensored) groups the builds by base model.

[Get a key](https://app.uncensoredllm.ai/console) Prepaid from $10, no subscription.

## New models and price changes, once a month.

New uncensored builds with their prices, price moves, and what the daily model check found.
