No Filter AI API: What It Is and How to Call It
A no filter AI API is a text model endpoint that does not refuse lawful adult requests with canned warnings. Here that means one hosted open-weight model, one fixed rule about minors, and an OpenAI-compatible way to call it.
Updated


What "no filter" means in practice
Most hosted models add a layer of refusal training and often a separate moderation step. They decline some topics, soften others, and append lectures. An API in this category is one where that behavior is not applied to lawful adult requests. You ask for dark fiction, blunt feedback, an unvarnished explanation or a morally gray character, and the model answers the task.
The service here runs one open-weight model, operated by an independent provider and tuned to answer without content refusals. It is not the official API of Meta, Mistral, Qwen, DeepSeek, OpenAI, xAI, Google, Anthropic or any other vendor, and it is not a router that picks between models. You get a single model under the ID uncensored.
"No filter" does not mean "no rules". Sexual content involving minors is a hard limit and is never allowed. Everything else you do is also subject to the law where you live and to the terms of the service, so lawful adult use is the frame. If you want a chat interface instead of an API, see the page on the no filter AI chatbot.
What you can and cannot expect
| You can expect | You should not expect |
|---|---|
| Answers to lawful adult requests without refusal boilerplate | Help with anything involving minors in sexual contexts |
| Fiction, roleplay and companion-app dialogue for adults | Images, audio, video, embeddings or fine-tuning |
| Standard OpenAI request and response formats | The behavior of any specific vendor's official model |
| Streaming, tool calling, JSON mode | Guaranteed factual accuracy; the model can be wrong |
| A 100,000-token context window | Unlimited request rates |
An unfiltered model is also not a more truthful one. It will answer, but it can answer wrongly with confidence, like any language model. Check facts that matter.
Two more limits are worth knowing before you build. The request body can be at most 8 MB, and prompt plus completion must fit in the 100,000-token window. Both are generous for text, but a pasted book or a large log file can reach them, and anything that does not fit will fail, so split large inputs into smaller parts and send them in separate requests.
Your first call
You need a key from the API key page. Sign up with Google, or with email and password. Then call the chat completions endpoint.
curl https://api.nofilterapi.com/v1/chat/completions \
-H "Authorization: Bearer YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "uncensored",
"messages": [
{"role": "system", "content": "You are a direct assistant who gives honest feedback."},
{"role": "user", "content": "Critique this opening line: The night was dark."}
]
}'
The same call with the Python SDK:
from openai import OpenAI
client = OpenAI(base_url="https://api.nofilterapi.com/v1", api_key="YOUR_KEY")
reply = client.chat.completions.create(
model="uncensored",
messages=[
{"role": "system", "content": "You are a direct assistant who gives honest feedback."},
{"role": "user", "content": "Critique this opening line: The night was dark."},
],
temperature=0.8,
max_tokens=400,
)
print(reply.choices[0].message.content)
The API also supports POST /v1/responses and GET /v1/models. Balance is available through GET /v1/balance or the X-Balance-USD response header.
Streaming, tools and JSON
Set stream: true to receive server-sent events, with usage reported at the end. Tool calling takes tools and tool_choice, streams tool_calls, and accepts results as messages with role: "tool". For structured output use JSON mode:
import json
from openai import OpenAI
client = OpenAI(base_url="https://api.nofilterapi.com/v1", api_key="YOUR_KEY")
r = client.chat.completions.create(
model="uncensored",
response_format={"type": "json_object"},
messages=[{"role": "user", "content": "Return JSON with keys title and tagline for a pirate-themed bakery."}],
)
print(json.loads(r.choices[0].message.content))
Sampling controls such as temperature, top_p, stop, seed and the penalties pass through. The documentation has the full list.
Pricing and limits
You pay for tokens from prepaid credit: $0.15 per 1M input and $0.50 per 1M output. There is no subscription, credit does not expire, and failed or refused requests are not charged.
Example: a request with 3,000 input tokens and 700 output tokens costs 3,000 / 1,000,000 x $0.15 = $0.00045 plus 700 / 1,000,000 x $0.50 = $0.00035, a total of $0.0008. A thousand of those cost $0.80.
Top-ups are any whole amount from $20 to $500, with +5% from $50, +10% from $100 and +15% from $200. You can pay by card (Visa, Mastercard, Apple Pay, Google Pay) or crypto (USDT on TRC20, USDC on Base). See the pricing page.
Limits for a full key are 8 concurrent requests and 300 per minute; a trial key gets 2 and 60. Exceeding them returns HTTP 429 with rate_limited or concurrency. A 429 with Retry-After: 5 means temporary overload. A streamed request holds a concurrency slot until the stream ends.
Trying it for free
New users can claim $0.50 of trial credit with one click on the API key page after sign-up. It is one per person, valid for 7 days, and needs no card. At the rate in the example above, that is more than 600 requests, plenty to judge whether the model's tone and quality suit your project.
Prompts are not used for training. If privacy claims matter to your use, read the myths and facts about no-log AI APIs before you decide how much to put in a prompt. Treat any hosted service as one where your text leaves your device.
Prompting an unfiltered model well
Removing refusals does not remove the need for good prompts. A few habits give clearly better results.
- State the task and the format. "Write a 300-word scene in third person, past tense" beats "write something dark".
- Use a system message for stable rules. Put the persona, tone and any boundaries you want in the system role, so they persist across turns.
- Set your own boundaries. Without built-in refusals, the model follows the limits you give it. If your app must stay within a rating or topic list, write that down in the system prompt and test it.
- Lower temperature for facts. Use 0.2 to 0.5 for analysis and 0.8 to 1.0 for creative work.
- Trim old turns. You pay for input on every request, so summarize long histories instead of resending them.
Prompt-level boundaries are guidance, not a guarantee. If you operate a public app, add your own checks on top.
Where it fits and where it does not
This kind of API suits fiction tools, character chat and companion apps for adults, writing assistants that should not lecture, and research tasks where refusals would block legitimate questions. It also suits developers who want to test one app against an uncensored model without hosting weights.
It is a poor fit if you need image generation, voice, embeddings, or a vendor's branded model. It is also a poor fit where regulation or your own policy requires moderation of user input: if you build a public product on top of it, you remain responsible for what your users do, and adding your own age checks and moderation is up to you. For popular roleplay frontends, see whether Janitor AI has a filter and how a custom endpoint changes that.
More guides
Questions and answers
Does no filter mean anything goes?
No. Sexual content involving minors is never allowed, and use must be lawful. The model simply does not apply content refusals to lawful adult requests.
Which model is behind the API?
One open-weight model run by an independent provider, available as uncensored. It is not an official API of any model vendor.
Is it compatible with the OpenAI SDK?
Yes. Set the base URL to https://api.nofilterapi.com/v1, use your key, and set the model to uncensored.
Can it generate images?
No. The API is text only, with no image, audio or video generation, no embeddings and no fine-tuning.
Your key is one form away
Create an account, copy the key, change the base URL. That is the whole setup.