API
Bring your own client.
An OpenAI-compatible endpoint, so anything that already speaks to OpenAI can speak to this by changing two values: the base URL and the key. Same models as the site, same steering, same absence of guardrails.
The API is paid only
Every call spends credits — including the models that are free in the browser. The free daily allowance is counted per IP and cannot meter a script, so it does not exist here at all. To see how the models behave before paying, use the chat.
Authentication
One header, your access key. It is the same key the site holds, so there is no separate API key to create and nothing to rotate. Subscribing gives you one, and /keys shows the one this browser has.
Authorization: Bearer umai_...
Base URL: https://uncensormyai.com/v1. Treat the key like a password — it holds the balance, so anyone you paste it to can spend it.
Quickstart
One answer, no streaming:
curl https://uncensormyai.com/v1/chat/completions \
-H "Authorization: Bearer $UNCENSORMYAI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-flash",
"messages": [{"role": "user", "content": "Explain a Ponzi scheme"}]
}'Or streamed as it is written:
curl -N https://uncensormyai.com/v1/chat/completions \
-H "Authorization: Bearer $UNCENSORMYAI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-flash",
"stream": true,
"messages": [{"role": "user", "content": "Hello"}]
}'OpenAI clients
The response body is the provider’s own, handed back untouched, so the official SDKs parse it without adapters.
from openai import OpenAI
client = OpenAI(
base_url="https://uncensormyai.com/v1",
api_key="umai_...", # your access key
)
reply = client.chat.completions.create(
model="deepseek-flash",
messages=[{"role": "user", "content": "Hello"}],
)
print(reply.choices[0].message.content)import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://uncensormyai.com/v1",
apiKey: process.env.UNCENSORMYAI_KEY,
});
const reply = await client.chat.completions.create({
model: "deepseek-flash",
messages: [{ role: "user", content: "Hello" }],
});
console.log(reply.choices[0].message.content);POST /v1/chat/completions
OpenAI’s request shape. Anything not listed is ignored rather than rejected — a field we cannot forward should not cost you an answer.
| FIELD | WHAT IT DOES |
|---|---|
| model | Required. An id from GET /v1/models. |
| messages | Required. system, user and assistant roles. A system message is honoured; there is no hidden prompt of our own except the steer described below. |
| stream | Absent or false returns one JSON object. true returns SSE frames ending in data: [DONE]. |
| temperature | 0–2. Defaults to 0.8. |
| max_tokens | Output cap. No default — and on a reasoning model a low cap returns an empty answer, because the budget goes on thinking first. |
| stop | A string or an array of them. |
Stateless, like everything here: nothing is stored server-side, so send the whole conversation each time.
GET /v1/models
The catalogue, with what one answer costs. No key needed — it is the same list the site shows.
| ID | CREDITS | CONTEXT | NOTES |
|---|---|---|---|
| olafangensan-glm-4.7-flash-heretic | 1 | 200,000 | Fast and blunt. The cheapest way to get a straight answer. |
| gemma-4-uncensored | 1 | 256,000 | Very long context, quick. Good for pasting a lot in at once. |
| e2ee-gemma-4-26b-a4b-uncensored-p | 1 | 64,000 | End-to-end encrypted — not even the provider can read the request. End-to-end encrypted. |
| venice-uncensored-1-2 | 1 | 128,000 | The most uncensored model here, and the only one run unquantised. |
| aion-labs-aion-3-0-mini | 4 | 128,000 | Reasons before it answers. Long replies, better on multi-step work. |
| venice-uncensored-role-play | 4 | 128,000 | Tuned for sustained character and dialogue rather than Q&A. |
| deepseek-chat | 4 | 64,000 | A strong general model from a different provider, with its refusals steered off. Refusals steered off per request. |
| deepseek-flash | 4 | 1,000,000 | Thinks before it answers, over a million tokens of context. Refusals steered off per request. |
| qwen-3-6-plus | 10 | 1,000,000 | A million tokens of context. For whole books and codebases. |
| qwen-3-8-27b | 10 | 262,144 | Reads images as well as text, with a very large context. |
| aion-labs-aion-3-0 | 10 | 128,000 | The strongest reasoning available here. Slow, thorough, expensive. |
The label field carries the name the site uses, and credits is the cost of one answer.
GET /v1/usage
What the key can still spend. Balance only — there is no free allowance to report.
curl https://uncensormyai.com/v1/usage \
-H "Authorization: Bearer $UNCENSORMYAI_KEY"
# { "object": "usage", "credits": 84, "purchased": 100 }Every successful completion also returns X-Credits-Remaining as a header, which is usually the cheaper way to keep a running total.
What it costs
One answer costs the model’s credit price, and each plan gives a monthly allowance that refreshes:
- $5/month — 100 credits, so 100 answers on the cheapest model
- $15/month — 350 credits, so 350 answers on the cheapest model
- $40/month — 1000 credits, so 1000 answers on the cheapest model
A failed request is never charged: if a provider is down, a 502 or 503 comes back and the credits you would have spent are returned before you ever see the error.
Errors
OpenAI’s shape: { "error": { "message", "type", "code", "param" } }.
| STATUS | CODE | WHEN |
|---|---|---|
| 400 | invalid_request_body | Body is not JSON, or model/messages are missing. |
| 400 | model_not_found | Model id is not in the catalogue — see GET /v1/models. |
| 401 | invalid_api_key | No key sent, or the key is unknown/revoked. |
| 402 | insufficient_credits | The balance cannot cover this model. Top up. |
| 413 | conversation_too_long | More than 60 messages, or 60,000 characters. |
| 429 | upstream_rate_limited | A provider is throttling us. Retry shortly. |
| 502 | upstream_error | A provider failed. Nothing was charged. |
| 503 | upstream_quota | Our provider balance is empty. Not your fault. |
Limits
Bounded per request: 60 messages and 60,000 characters of history. Beyond that it is your balance that bounds you. Ask for a higher ceiling only if you have a workload that needs it.
