API
Documentation
Works out of the box. No rain dance. OpenAI-compatible Chat Completions. Get a key in the site cabinet or the Telegram bot: /api or the API button.
https://uncensored.dog/v1z-ai/glm-5.3-flash-uncensoredHow to start
- Open the cabinet or @uncensobot. Key, balance, and payment are shared.
- Buy a pack ($1–$100, Crypto or xRocket USDT). No balance → 402.
- API button — the secret is shown once. Strip spaces and a trailing newline from Telegram.
- Three client fields: Base URL with
/v1, the key, the exact model id. New chat after changing the host. - Ping: “Reply with one word: ready”. If you get a reply, the client is hitting us.
More: bot → key → API.
What the API does
GET /v1/models— catalog; sendAuthorization: Bearer. No key → 401. There is no public catalog without auth.POST /v1/chat/completions— text, images (image_url), stream.max_tokensandmax_completion_tokensare accepted. The gateway forwardstools,tool_choice, andparallel_tool_calls. If the provider cannot run tools, you get the upstream error.- The model id must be one from the list below. Empty
modeluses GLM Flash. The Telegram picker does not change the API. - In the client set context window
1048576and output budget16384(or your ownmax_tokens/max_completion_tokens). That caps one completion, not the whole thread. - System prompt, history, and tools share that window.
- Request body up to 32 MiB. Larger → 413.
- Before the call we reserve estimated input plus the output budget (
max_tokens/max_completion_tokens, otherwise 16384) at the model rate. If the reserve does not fit the available balance — 402. After the response we charge actual usage and release the rest. A stuck reserve expires after 20 minutes. - Anthropic Messages, OpenAI Responses, embeddings, and FIM are not served.
- Do not retry if a stream already started: that is a second billed request. For support send the time and
X-Request-ID, not the key. - Do not append
/chat/completionsto the Base URL — the client does that.
Cache is part of input: if usage reports cached_tokens, they bill at the model’s cache price. Cards: home. Menu labels depend on the client version; we did not certify every agent scenario in every IDE.
-
z-ai/glm-5.3-flash-uncensoredDefault. Chat, writing, code. -
abliteration-ai/abliterated-model-large-v2The smartest and fastest. -
abliteration-ai/abliterated-model-large-flashFast Abliterated model based on DeepSeek Flash. -
qwen/qwen3.8-27b-uncensoredChat and code, reasoning optional. -
qwen/qwen3.8-27b-uncensored:thinkingReasoning, multi-step tasks. -
pqhaz/DeepSeek-V4.1-Flash-1017-heretic:thinkingFast DeepSeek Flash, reasoning always on. -
abliteration-ai/abliterated-modelShort and everyday text. -
Gemma-4-31B-Gembrain-uncensored-hereticConversation, writing, analysis. -
z-ai/glm-5.3-uncensoredFull GLM 5.3, experimental, text only. -
xiaomi/mimo-v2.6-flash-uncensoredText MiMo, reasoning optional. -
xiaomi/mimo-v2.6-flash-uncensored:thinkingMiMo with reasoning always on, slower replies.
ZCode
- In the bot open API, create a key with a clear name, e.g.
zcode. - Install or update ZCode from zcode.z.ai.
- Settings → Model Settings. Or tap the model name under the input → Manage Models.
- At the bottom of the list — Add Provider. Any name, e.g.
uncensored. - OpenAI Base URL:
https://uncensored.dog/v1. Leave Anthropic Base URL empty. - Format: Chat completions. Paste the key. If you see “API Key Required”, turn it on. Save.
- Add Model, ID exactly
qwen/qwen3.8-27b-uncensored. Display name is yours. - Advanced for this model: Context Window
1048576, Max output tokens16384. - Enable the toggle on both the provider and the model. In chat pick a model from this group, not the built-in Z.ai GLM.
- New task, a short ping such as “Reply with one word: ready”.
Do not paste the key into the Z.ai / BigModel card — those hit /paas/v4, which will not work. Do not add a [1m] suffix to the model id.
Cursor
- Settings → Models → API Keys / OpenAI compatible (wording depends on version).
- Override OpenAI Base URL:
https://uncensored.dog/v1. Leave Anthropic Base URL empty. - Key from the bot. Model:
qwen/qwen3.8-27b-uncensored, no[1m]suffix. - New agent chat after changing the URL. Old threads may keep the previous host.
Cursor Tab and bundled Cursor models follow Cursor’s terms, not our key. Details: custom Base URL in Cursor. From Cursor’s terminal you can also run Aider — that is a separate client.
Roo Code (VS Code)
- Roo panel → API Provider → OpenAI Compatible.
- Base URL, key, model id as above. Context Window
1048576, Max Output Tokens16384. - Turn on Image Support if you need pictures. Do not enable Computer Use as a model capability — vision does not add it.
- Price fields in Roo are for the extension UI. Billing is always our pricing (GLM input $0.39 / output $1.58 / cache $0.16 per 1M).
- Start with one small task and one file. Roo uses native
tools.
Cline (VS Code)
- Cline → Settings → API Provider: OpenAI Compatible.
- Base URL, key, model id. If Plan and Act have separate providers, fill both the same way.
- Model Configuration: Max Output Tokens
16384, Context Window1048576, Image Support if needed. - Short request. System instructions, history, and tools share that window.
Kilo Code (VS Code)
- Settings → Providers → Custom provider. Any id, e.g.
uncensored. - Provider API: OpenAI Compatible. Base URL, key, model id. Save.
- In
kilo.jsoncfor the model:limit.context = 1048576,limit.output = 16384. Pick this provider in the model list. - Chat Completions only. GLM accepts images; do not pick Anthropic in Kilo.
Continue (VS Code / JetBrains)
VS Code: Continue extension → local config.yaml. JetBrains: Settings → Plugins → Continue, same model file. If a config already exists, merge only the models entry.
models:
- name: GLM 5.3 Flash Uncensored
provider: openai
model: qwen/qwen3.8-27b-uncensored
apiBase: https://uncensored.dog/v1
apiKey: YOUR_KEY
roles:
- chat
- edit
defaultCompletionOptions:
maxTokens: 16384
Chat and Edit work. Autocomplete and indexing via embeddings do not — we do not serve embeddings.
Zed
- Command
zed: open settings file— add the provider insettings.jsonwithout wiping the rest. - Command
agent: open settings— paste the key in the provider UI, not in JSON. - In the AI panel pick GLM and send a short text prompt.
{
"language_models": {
"openai": {
"api_url": "https://uncensored.dog/v1",
"available_models": [
{
"name": "qwen/qwen3.8-27b-uncensored",
"display_name": "GLM 5.3 Flash Uncensored",
"max_tokens": 1048576,
"max_output_tokens": 16384
}
]
}
}
}
In Zed max_tokens is the context window; max_output_tokens is the reply budget. Edit Prediction is separate and need not hit our API.
JetBrains AI Assistant
- Settings → Tools → AI Assistant → Providers & API keys.
- Third-party AI providers → OpenAI-compatible. URL
https://uncensored.dog/v1, key from the bot. Test Connection. - In AI Chat pick GLM. Optionally Model Assignment → Core features, context
1048576.
This covers chat and code generation. It does not replace a JetBrains subscription or every bundled agent. Continue in the same IDEs: section above.
Aider
Terminal in the project folder (VS Code, Cursor, JetBrains — same). The openai/ prefix tells Aider which protocol to use. An “unknown model” warning is possible — copy the id in full. Do not dump the whole repo: /add one small file, then describe the edit.
export OPENAI_API_BASE=https://uncensored.dog/v1 export OPENAI_API_KEY=YOUR_KEY aider --model openai/qwen/qwen3.8-27b-uncensored
PowerShell: $env:OPENAI_API_BASE and $env:OPENAI_API_KEY.
OpenCode 2
Merge this provider into opencode.jsonc (v1 uses a different format). Keep the key in the environment. The object key under models is the id OpenCode sends to the API. name is only the label in the picker. An alias like glm returns 400 "Unknown model". In /models pick uncensored/z-ai/glm-5.3-flash-uncensored. Start with a small task.
If the model is listed but chat says "no API key" or "invalid key", the UNCENSORED_API_KEY variable is almost always unset: an empty value is sent as an empty key. Set it in the same shell you launch opencode from. PowerShell: $env:UNCENSORED_API_KEY="sk-...", bash: export UNCENSORED_API_KEY=sk-.... Check the key: curl.exe https://uncensored.dog/v1/models -H "Authorization: Bearer $env:UNCENSORED_API_KEY" should return the model list.
{
"provider": {
"uncensored": {
"npm": "@ai-sdk/openai-compatible",
"name": "uncensored.dog",
"options": {
"baseURL": "https://uncensored.dog/v1",
"apiKey": "{env:UNCENSORED_API_KEY}"
},
"models": {
"z-ai/glm-5.3-flash-uncensored": {
"name": "GLM 5.3 Flash",
"limit": { "context": 1048576, "output": 16384 }
}
}
}
}
}
Python and Node
Keep the key on the server, never in browser JS. Do not call client.responses.create — that is 404.
from openai import OpenAI
client = OpenAI(
api_key="YOUR_KEY",
base_url="https://uncensored.dog/v1",
)
r = client.chat.completions.create(
model="qwen/qwen3.8-27b-uncensored",
messages=[{"role": "user", "content": "ping"}],
max_tokens=32,
)
print(r.choices[0].message.content)
Streaming: stream=True, read chunk.choices[0].delta.content. Install: python -m pip install openai.
const r = await fetch("https://uncensored.dog/v1/chat/completions", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.UNCENSORED_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "qwen/qwen3.8-27b-uncensored",
messages: [{ role: "user", content: "ping" }],
max_tokens: 32,
}),
});
const data = await r.json();
if (!r.ok) throw new Error(data.error?.message || r.status);
console.log(data.choices[0].message.content);
Any other OpenAI-compatible agent (Hermes and similar) uses the same three fields: Base URL with /v1, key, model id.
cURL check
curl https://uncensored.dog/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d "{
\"model\": \"qwen/qwen3.8-27b-uncensored\",
\"messages\": [{\"role\": \"user\", \"content\": \"ping\"}],
\"max_tokens\": 32
}"
If it does not answer
- 401 — missing key, typo, space/newline, or revoked. Issue a new one in the cabinet or in the bot.
- 402 — no balance. Top up in the cabinet or in the bot; a large
max_tokensdoes not replace a top-up. - 400 — wrong
modelor bad JSON. Copy the id in full, no[1m]. - 413 — body over 32 MiB (history, image). Shrink the attachment; PNG/JPEG, not a giant.
- 404 — Base URL without
/v1, or the client is hitting Anthropic / Responses / embeddings / FIM. - 429 — too many in-flight requests (3 per key). Wait; do not loop billable retries.
- 503 — temporary fault. Wait; do not retry immediately.
- Truncated reply,
finish_reason: length— raise the output budget, new chat, or split the task. Stream long generations. - Timeout — stream, shorter task, larger client timeout.
- Images: GLM accepts them; the client may not attach files. Start with one small PNG/JPEG.
- In ZCode the model row toggle is off — the request will not leave.
What does not connect
Claude Code and ANTHROPIC_BASE_URL change the host, not the protocol: they need Anthropic Messages, which we do not serve. Codex wants Responses — also missing. GLM does not become Claude/GPT because you switched the client. For an agent use Cline, Roo, OpenCode, or Aider.
Keys and balance live in the cabinet or in Telegram. Docs: this page.