it ▾

Uncensored chat completions API documentation

Start generating uncensored text with a single request to our OpenAI-compatible chat completions endpoint. This guide covers the base URL, authentication, and the specific parameters needed to bypass standard refusals.

Base URL and Authentication

Send requests to https://api.completionschat.com/v1 using your API key for authentication. We use a standard Bearer token header, so existing OpenAI SDKs work immediately. Generate your key via the dashboard using Google or email without a phone number. The key is displayed once, so copy it securely.

Every request must include this key in the Authorization: Bearer YOUR_KEY header. If the key is missing or invalid, the server returns a 401 error. Your credit never expires, so you can generate a new key anytime without losing your balance.

First Request

Make your first call to POST /v1/chat/completions with the model ID uncensored. This model is tuned to answer without content refusals for lawful adult use. It is not GPT, Claude, or any other vendor's model. Set the temperature to control creativity.

Common issues involve duplicate paths in the URL, like /chat/completions/chat/completions. Ensure your base URL ends cleanly before the endpoint. Use this curl command to verify connectivity and token pricing.


curl https://api.completionschat.com/v1/chat/completions \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "uncensored",
    "messages": [{"role": "user", "content": "List the five most common errors in Python code"}]
  }'

Python SDK Usage

Use the official openai Python package to interact with the API. Set the base_url and api_key in the client initialization. This approach handles JSON serialization automatically. You can pass multiple messages to build context for roleplay or complex tasks.

The model accepts standard parameters like temperature, top_p, and stop sequences. Adjust these to fine-tune the output style. Use this snippet to send a simple message and print the response.


from openai import OpenAI

client = OpenAI(base_url="https://api.completionschat.com/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

Initialize the Node.js OpenAI client with your specific base URL and key. This allows you to use familiar methods like chat.completions.create(). The library handles the HTTP requests and response parsing. You can define the system prompt to enforce specific behaviors or personas.

Configure the model to uncensored for unrestricted content generation. This works seamlessly with existing codebases designed for OpenAI. Pass your messages array and await the result to get the generated text.


import OpenAI from "openai";

const client = new OpenAI({ baseURL: "https://api.completionschat.com/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

Enable streaming by setting stream: true in your request. The server returns data chunks via Server-Sent Events (SSE). Each chunk contains partial text and usage statistics in the final chunk. This reduces perceived latency for long outputs.

Handle the stream asynchronously to avoid blocking your application. You can accumulate the text or process tokens in real-time. This feature is essential for chat interfaces and interactive roleplay scenarios. Set the stream option to true.


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)

Limits, Errors, and Context

The context window supports 100,000 tokens for input and output combined. Max output is 16,000 tokens per request, or 2,048 if you omit max_tokens. Rate limits allow 300 requests per minute and 8 concurrent requests per key. Request bodies must stay under 8 MB.

Errors are standard HTTP codes. A 401 indicates an invalid key. A 402 means your prepaid credit is exhausted. A 429 signals you have hit the rate limit. Errors and refusals consume no credit, so you can retry safely. Always check the error body for details.

Frequently asked questions

How do I debug the 404 error when using the chat completions endpoint?

Check your URL for duplicate paths like <code>/chat/completions/chat/completions</code>. Ensure your base URL does not already include the endpoint path. Copy the base URL directly from the documentation to avoid typos.

Does the uncensored LLM refuse all adult content?

No, the model is tuned to answer without refusals for lawful adult use. The only hard limit is sexual content involving minors, which is always refused. You can generate controversial or fictional content freely.

What happens if I exceed the rate limit?

The API returns a 429 status code. You can retry after a short delay. Limits are 300 requests per minute and 8 concurrent requests per key. Errors do not consume your prepaid credit.

Begin with trial funds

Email and password suffice. Your key appears on screen instantly.

Try with trial credit