EN ▾

Open-weight LLM API with no content limits.

Quick Guide to Using the Uncensored AI API

This documentation guides you to easily integrate the uncensored LLM API into your application. Use this guide to start the uncensored chat completions API in minutes.

Base URL
https://api.apitanpasensor.com/v1
Model
uncensored
Get API key

Configure Base URL and Authentication

To get started, you need to configure the base URL so that the OpenAI-compatible SDK points to our server. Use https://api.apitanpasensor.com/v1 as the main endpoint. Authentication is done via the Authorization: Bearer YOUR_API_KEY header. The API key you receive upon registration is unique and valid for only one account. If you regenerate the key, the old key is immediately revoked and can no longer be used, even though the old key does not expire automatically over time.

A First Request Example

Send a POST request to /v1/chat/completions with the uncensored model. This is an open-weight model that does not filter legitimate or controversial adult topics, unlike standard enterprise models.

curl https://api.apitanpasensor.com/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."}]
  }'

Make sure to include the model parameter with the value uncensored. The response will be a JSON containing the text generated by the model.

Python SDK Integration

Use the openai library in Python to interact with the API. Set base_url and api_key according to the configuration above. The uncensored model supports a context length of up to 100,000 tokens, allowing you to send very long prompts without losing important information.

from openai import OpenAI

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

The code example above shows how to send system and user messages simply.

Node.js SDK Integration

For Node.js users, the OpenAI SDK can also be configured easily. Set baseURL to our endpoint URL and use your API key. This approach allows you to integrate uncensored AI into your web application or server-side quickly.

import OpenAI from "openai";

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

Remember that this model handles text only and does not support image, audio, or video generation.

Enable Streaming (SSE)

For a more responsive user experience, enable streaming by adding stream: true to the request parameters. The API will return the response using Server-Sent Events (SSE). This is very useful for real-time chat applications where users see results token by token.

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 price or token limit, only the way the response is delivered.

Limits, Errors, and Context Management

This API has a limit of 300 requests per minute per key and a maximum request body size of 8 MB. If the key is invalid, you will receive a 401 error. If your credit balance is exhausted, a 402 error will appear. Error 429 indicates you have exceeded the rate limit. The context window is 100,000 tokens for combined prompt and completion. Make sure to manage tokens wisely so as not to exceed this limit.

Questions and answers

Does my API key expire?

API keys do not have an automatic expiration date. However, if you choose to regenerate the key in the dashboard, the old key is immediately revoked and becomes invalid, even if it hasn't passed a certain time.

Is this model really uncensored?

Yes, our open-weight model is configured to not reject valid adult, fictional, or security research topics. The only strict limitation that always applies is child sexual abuse content.

What if I run out of credit?

You will receive a 402 (Payment Required) error on the next request. The credit you buy never expires, so you can top up at any time without fear of losing your balance.

Your key takes just one step

Create an account, copy the key, change the base URL. That's the setup process.

Under the hood: specs

Everything the endpoint can and cannot do, in one place — check it before you top up.

ItemValue
API formatOpenAI-compatible: any OpenAI SDK or client works — change the base URL and the key
MethodsPOST /v1/chat/completions · GET /v1/models
API keyAuthorization: Bearer YOUR_KEY
Modeluncensored
Base URLhttps://api.apitanpasensor.com/v1
Sampling parameterstemperature, top_p, stop, seed and the two penalties are passed through
Structured outputJSON object mode via response_format json_object
Completion lengthup to the rest of the 100,000-token window; max_tokens optional (no separate cap)
Context window100,000 tokens (prompt + completion together)
StreamingSupported (stream: true), usage included at the end
Function callingSupported: tools + tool_choice, tool_calls in the reply (streamed too), tool results as role: tool messages
Concurrencyup to 8 in parallel per key
HeadersX-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency
Requests per minute300 requests per minute per key
Request size8 MB request body
Price$0.25 per 1M input tokens · $1.00 per 1M output tokens
How you payprepaid credit, charged by real token usage; errors and refusals are free
Volume bonus+5% on $50+, +10% on $100+, +15% on $200+
Trial credit$0.50 of credit valid 7 days, no card needed · Trial key: 2 parallel requests, 60 req/min; full limits (8 and 300) after first top-up
PaymentUSDT (TRC20) or USDC (Base), any whole amount from $20 to $500
Credit expirypaid credit never expires, no subscription
Key managementone active key per account; a new key replaces the old one
Contentadult content allowed; sexual content involving minors is refused
Accountsign in with Google or with e-mail + password

Error codes

Every error is JSON with a type you can switch on. You are never charged for an error.

StatusTypeReason
400bad_requestmalformed request or too long for the context window
401missing_key · invalid_key · key_revokedcheck the Authorization header or use your current key
402no_creditout of credit; add credit and retry
403content_blockedsexual content involving minors — refused, not billed
404not_foundunknown endpoint
413request_too_largerequest body larger than 8 MB
429rate_limited · concurrencyslow down: rate or parallel limit reached
503upstream_busytemporary overload, retry shortly