Qwen Abliterated: Switch your client in three lines
Connect your existing OpenAI SDK client to our uncensored endpoint in under a minute. Replace the base URL and API key, then run your standard chat-completions calls without modification.
Authentication and Base URL
Our API follows the standard OpenAI format. You only need two things: the base URL and a valid API key. The base URL is https://api.qwenabliterated.top/v1. You do not need to import special libraries or change your code structure. Simply update your client configuration to point to this URL and provide the key you generated on the Get API key page. The system uses standard bearer token authentication, so any existing OpenAI-compatible SDK works out of the box.
curl https://api.qwenabliterated.top/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [{"role": "user", "content": "Write a blunt product review of a cheap VPN."}]
}'Keep your key secure. Unlike some providers, we do not track your identity beyond the email you use to sign up. Prompts are not used for training data. If you lose your key, generate a new one; it replaces the old active key immediately.
First Completion Request
Send your first message using the standard /v1/chat/completions endpoint. Pass the model ID as "uncensored". This model is open-weight, tuned for raw output, and does not apply the typical refusals found in general-purpose models. It handles adult, controversial, or technical topics without extra noise, provided the content does not involve minors.
from openai import OpenAI
client = OpenAI(base_url="https://api.qwenabliterated.top/v1", api_key="YOUR_KEY")
resp = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Summarise this thread without softening it."}],
)
print(resp.choices[0].message.content)The response returns the generated text in the choices[0].message.content field. If the request fails due to an invalid key, you will receive a 401 error. If your prepaid credit is exhausted, you will receive a 402 error. Errors do not consume your token balance, so you can retry without penalty.
Streaming Responses
For real-time applications, enable streaming by setting stream: true. The API returns a Server-Sent Events (SSE) stream. Each chunk contains a partial token. The final chunk includes the total token usage for the request, allowing you to track costs accurately. This is ideal for chat interfaces or terminal-based tools where latency matters.
stream = client.chat.completions.create(
model="uncensored",
messages=[{"role": "user", "content": "Tell the story in second person."}],
stream=True,
)
for chunk in stream:
if chunk.choices and chunk.choices[0].delta.content:
print(chunk.choices[0].delta.content, end="", flush=True)Streaming does not change the model's behavior or context window. It only affects how the response is delivered. Ensure your client handles the stream correctly to avoid memory leaks. The uncensored model performs well under streaming, delivering coherent text without the typical mid-sentence cutoffs seen in filtered models.
JSON Mode
When you need structured data, use response_format: {"type": "json_object"}. The model is instructed to output valid JSON. This is useful for parsing configuration, generating code structures, or feeding data into downstream services. While not guaranteed to be perfect, the uncensored model handles complex structures better than standard models that might refuse to output raw JSON for safety reasons.
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.qwenabliterated.top/v1", apiKey: process.env.API_KEY });
const resp = await client.chat.completions.create({
model: "uncensored",
messages: [{ role: "user", content: "Draft a villain monologue for my game." }],
});
console.log(resp.choices[0].message.content);Always validate the output on your side. If the JSON is malformed, the API does not retry automatically. You can adjust the temperature to influence consistency. Lower temperatures yield more predictable JSON structures, while higher temperatures introduce more creativity but risk formatting errors.
Function Calling
Support for tools is built-in. Define your functions in the tools parameter and set tool_choice as needed. The model will return a tool_calls array if it decides to invoke a function. You must execute the function and pass the result back in a subsequent message with role: "tool". This follows the standard OpenAI tool-use pattern.
This feature works with any OpenAI-compatible SDK. The uncensored model handles tool definitions clearly, without refusing to output function names due to content filters. It is suitable for building agents or automating workflows that require external API calls.
Parameters, Limits, and Errors
The context window is 100,000 tokens, including both prompt and completion. There is no separate output cap (if max_tokens is unset, the response can run to the end of the window). You can control generation with temperature, top_p, stop, seed, and penalty parameters.
Rate limits are 300 requests per minute and 8 concurrent requests per key. If you exceed these, you will receive a 429 error. Request bodies must be under 8 MB. These limits ensure stable performance for high-volume users. There are no hidden restrictions on the type of content you can generate, except for the hard limit on sexual content involving minors.
API specifications
Before you integrate, here is exactly what you get with a key.
| Item | Value |
|---|---|
| Protocol | OpenAI Chat Completions schema; official openai SDKs work unchanged |
| Endpoints | POST /v1/chat/completions · GET /v1/models |
| Authentication | Bearer token in the Authorization header |
| Model ID | uncensored |
| Base URL | https://api.qwenabliterated.top/v1 |
| Max output | prompt + completion fit within 100,000 tokens; max_tokens optional, no separate output cap |
| Context window | 100,000 tokens, input and output combined |
| Streaming | Supported (stream: true), usage included at the end |
| Sampling parameters | temperature, top_p, stop, seed and the two penalties are passed through |
| JSON mode | JSON object mode via response_format json_object |
| Tools / tool calls | Supported: tools + tool_choice, tool_calls in the reply (streamed too), tool results as role: tool messages |
| Rate limit | 300 requests per minute per key |
| Headers | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| Max body | 8 MB request body |
| Concurrency | 8 requests at the same time per key |
| Token prices | $0.15 per 1M input tokens · $0.50 per 1M output tokens |
| Bonus credit | +5% from $50, +10% from $100, +15% from $200 |
| How you pay | prepaid credit, charged by real token usage; errors and refusals are free |
| Credit expiry | paid credit never expires, no subscription |
| Free trial | $0.50 for 7 days, no card · Trial key: 2 parallel requests, 60 req/min; full limits (8 and 300) after first top-up |
| Payment | USDT (TRC20) or USDC (Base), any whole amount from $20 to $500 |
| Key management | one key per account, regenerate any time (the old one stops working) |
| Sign-in | Google or e-mail and password |
| Content | adult content allowed; sexual content involving minors is refused |
Error codes
Errors come back as JSON with a stable type; failed and refused requests are not billed.
| Code | Type | Meaning |
|---|---|---|
400 | bad_request | malformed request or too long for the context window |
401 | missing_key · invalid_key · key_revoked | no key, wrong key, or a key replaced by a newer one |
402 | no_credit | balance is empty — top up, requests resume at once |
403 | content_blocked | refused by the content policy |
404 | not_found | only /v1/chat/completions and /v1/models exist |
413 | request_too_large | request body larger than 8 MB |
429 | rate_limited · concurrency | slow down: rate or parallel limit reached |
503 | upstream_busy | temporary overload, retry shortly |
Questions and answers
Is this the same as the official Qwen model?
No. We run an open-weight model tuned for uncensored output. It is not GPT, Claude, Gemini, Grok, or any other vendor's model. It is independent and serves our specific use case for raw content generation.
Can I use my existing OpenAI API key?
No. You must generate a key from our platform. The key format is standard, but it is tied to your prepaid credit account here, not to any other provider. Keys are shown immediately after signup.
What happens if I get a 402 error?
A 402 error means your prepaid credit is exhausted. Top up by crypto (USDT on TRC20, USDC on Base) to continue. Errors and refusals do not consume credit, so you only pay for successful token usage.
Your key is one form away
Create an account, copy the key, change the base URL. That is the whole setup.
Get API key