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
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.
| Item | Value |
|---|---|
| API format | OpenAI-compatible: any OpenAI SDK or client works — change the base URL and the key |
| Methods | POST /v1/chat/completions · GET /v1/models |
| API key | Authorization: Bearer YOUR_KEY |
| Model | uncensored |
| Base URL | https://api.apitanpasensor.com/v1 |
| Sampling parameters | temperature, top_p, stop, seed and the two penalties are passed through |
| Structured output | JSON object mode via response_format json_object |
| Completion length | up to the rest of the 100,000-token window; max_tokens optional (no separate cap) |
| Context window | 100,000 tokens (prompt + completion together) |
| Streaming | Supported (stream: true), usage included at the end |
| Function calling | Supported: tools + tool_choice, tool_calls in the reply (streamed too), tool results as role: tool messages |
| Concurrency | up to 8 in parallel per key |
| Headers | X-Request-Id, X-Balance-USD, X-RateLimit-Limit-Requests, X-RateLimit-Limit-Concurrency |
| Requests per minute | 300 requests per minute per key |
| Request size | 8 MB request body |
| Price | $0.25 per 1M input tokens · $1.00 per 1M output tokens |
| How you pay | prepaid 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 |
| Payment | USDT (TRC20) or USDC (Base), any whole amount from $20 to $500 |
| Credit expiry | paid credit never expires, no subscription |
| Key management | one active key per account; a new key replaces the old one |
| Content | adult content allowed; sexual content involving minors is refused |
| Account | sign 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.
| Status | Type | Reason |
|---|---|---|
400 | bad_request | malformed request or too long for the context window |
401 | missing_key · invalid_key · key_revoked | check the Authorization header or use your current key |
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 | slow down: rate or parallel limit reached |
503 | upstream_busy | temporary overload, retry shortly |