Developer Quickstart: Uncensored API
Integrate the uncensored LLM into your application using a standard OpenAI-compatible endpoint. This guide covers authentication, request formatting, streaming, and tool usage for the hosted API.
Base URL and Authentication
Start by setting your base_url to https://api.abliteratedmodels.cc/v1. Authenticate every request by including your API key in the Authorization header as a Bearer token. You can generate a key immediately after signing up via Google or email on the Get API key page. The key is displayed once; store it securely in your environment variables.
- Header:
Authorization: Bearer YOUR_API_KEY - No additional query parameters are required for auth.
Ensure your client library supports custom base URLs. This allows you to swap out the default OpenAI endpoint without changing your code structure.
First Request
Send a POST request to /v1/chat/completions with the model ID uncensored. The API accepts standard chat completion parameters. Text goes in, text comes out. There are no embeddings or image generation endpoints.
- Model:
uncensored - Endpoint:
POST /v1/chat/completions
Use the following curl command to verify connectivity:
curl https://api.abliteratedmodels.cc/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."}]
}'
Python SDK Integration
The official OpenAI Python SDK works directly with this API. Initialize the client with the correct base URL and your key. This approach abstracts the HTTP details while maintaining full control over parameters like temperature and top_p.
- Use
OpenAI(base_url=..., api_key=...) - Call
client.chat.completions.create()
Here is a minimal example for a coding llm task:
from openai import OpenAI
client = OpenAI(base_url="https://api.abliteratedmodels.cc/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)
Node SDK Integration
For Node.js environments, use the openai npm package. Configure the baseURL to point to our server. This method is ideal for backend services or serverless functions where you need programmatic access to the uncensored model.
- Install the
openaipackage - Set
baseURLtohttps://api.abliteratedmodels.cc/v1
Example implementation:
import OpenAI from "openai";
const client = new OpenAI({ baseURL: "https://api.abliteratedmodels.cc/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);
Streaming Responses (SSE)
Enable streaming by setting stream: true in your request. The API returns Server-Sent Events (SSE). Token usage statistics are included in the final chunk. This reduces perceived latency for end-users during content generation.
- Set
stream: true - Parse SSE events on the client or server
Code snippet for streaming:
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)
Rate Limits and Context Window
Each API key allows 300 requests per minute and 8 concurrent requests. The request body must not exceed 8 MB. The context window is 100,000 tokens total. There is no separate output cap; if max_tokens is unset, the response can run to the end of the window. If you hit the limit, your requests will queue or fail. Manage concurrency to stay within the 8 concurrent request threshold. Check the Pricing page for credit details.
Questions and answers
How does the uncensored model handle content refusals?
The model is tuned to answer without refusals for lawful adult use, including controversial or fictional topics. It does not apply the same corporate filters as other vendors. However, a hard limit blocks sexual content involving minors, which is always refused regardless of the prompt.
What happens if I exceed my prepaid credit?
When your prepaid credit is exhausted, subsequent requests will fail. You can top up by crypto: USDT (TRC20) or USDC (Base), with amounts between $20 and $500. Credit never expires, so you can add funds at any time without a subscription fee.
Does this API support function calling?
Yes, you can use the tools and tool_choice parameters for function calling. You can also enforce JSON output using response_format: {"type": "json_object"}. This is useful for generating structured data or integrating with other systems.
Your key is one form away
Create an account, copy the key, change the base URL. That is the whole setup.
Specs at a glance
If your tool speaks the OpenAI API, these are the details that matter.
| Parameter | Details |
|---|---|
| API format | OpenAI-compatible: any OpenAI SDK or client works — change the base URL and the key |
| Base URL | https://api.abliteratedmodels.cc/v1 |
| Endpoints | POST /v1/chat/completions · GET /v1/models |
| API key | Authorization: Bearer YOUR_KEY |
| Model ID | uncensored |
| Structured output | JSON object mode via response_format json_object |
| Max output | up to the rest of the 100,000-token window; max_tokens optional (no separate cap) |
| Max context | 100,000 tokens (prompt + completion together) |
| Other parameters | temperature, top_p, stop, seed, presence_penalty, frequency_penalty |
| Function calling | Supported: tools + tool_choice, tool_calls in the reply (streamed too), tool results as role: tool messages |
| SSE streaming | Supported (stream: true), usage included at the end |
| Max body | 8 MB request body |
| Rate limit | 300/min per key |
| Concurrency | 8 requests at the same time per key |
| Response headers | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| Trial credit | $0.50 for 7 days, no card · Trial key: 2 parallel requests, 60 req/min; full limits (8 and 300) after first top-up |
| Top-up | crypto: USDT on TRON or USDC on Base, $20–$500, any whole sum |
| Token prices | input $0.15 / 1M tokens, output $0.50 / 1M tokens |
| Subscription | no monthly fee; paid credit does not expire |
| Volume bonus | +5% from $50, +10% from $100, +15% from $200 |
| How you pay | pay as you go from prepaid credit; nothing is charged for failed or refused requests |
| Key management | one key per account, regenerate any time (the old one stops working) |
| Account | Google or e-mail and password |
| Content policy | uncensored for adults; the only hard rule: no sexual content involving minors |
Error codes
The type field is stable, the message is for humans. Errors cost nothing.
| HTTP | Type | What to do |
|---|---|---|
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 | out of credit; add credit and retry |
403 | content_blocked | sexual content involving minors — refused, not billed |
404 | not_found | unknown endpoint |
413 | request_too_large | request body larger than 8 MB |
429 | rate_limited · concurrency | over 300/min or 8 parallel — back off and retry |
503 | upstream_busy | temporary overload, retry shortly |