API
Uncensored AI API: who serves which weights
Several services sell API access to refusal-reduced models. They differ most in something prices do not show: whether you can tell which weights answer your request.
An uncensored AI API is a hosted endpoint that serves a refusal-reduced model, usually through the OpenAI chat-completions format, so existing SDKs work by changing the base URL. Some providers name the exact Hugging Face repo they serve; others serve their own build and do not say which weights it uses; general routers mostly serve the standard models. Self-hosting gives you the same API shape with weights you choose.
Disclosure. Uncensored AI Atlas has a commercial relationship with MolochAI. We may benefit when you sign up or buy credit through our links. MolochAI appears here with the same data standards as every other provider, and its rows are labelled. How we handle this.
Three kinds of hosted offering
Names the exact Hugging Face repo
You can read the card of the exact weights, check their license and test the same file locally. Featherless works this way for its whole catalogue; Venice links a source for each model, often a Hugging Face repo.
Own refusal-reduced build, weights not named
The provider says the model is refusal-reduced but not which weights it runs. You are relying on its description. MolochAI, our partner, works this way for its five models.
Standard model, not refusal-reduced
The developer's standard instruct model, usually much cheaper and widely hosted. Listed so you can see the price gap; it is not a substitute for a refusal-reduced variant.
Self-hosting is the fourth route. llama.cpp's server, vLLM and Ollama all expose OpenAI-compatible endpoints, so the code below runs against your own machine with a different base URL. See local vs hosted for the tradeoffs and the VRAM estimator for hardware.
OpenAI compatibility, as each provider documents it
| Feature | Featherless | MolochAIPartner | OpenRouter | Venice |
|---|---|---|---|---|
| OpenAI-style chat completions | YesWorks with OpenAI SDKs by changing the base URL. | YesPOST /chat/completions, plain and streaming. | YesThe OpenAI SDK can be pointed at OpenRouter. | YesThe docs describe the API as OpenAI-compatible. |
| Public model list | YesPublic GET /v1/models with prices and context per model. | YesGET /models. | YesPublic GET /api/v1/models with prices and supported parameters. | YesPublic model list with prices, limits and capabilities. |
| Streaming (SSE) | YesDocumented in the API docs. | YesUsage is always included in the final chunk. | Yes | Yesstream=true is documented. |
| Tool / function calling | Per modelFlagged per model (tool_use) in the model list. | YesQuality can vary by server. While streaming, tool arguments arrive whole. | Per modelListed per model in supported_parameters. | Per modelFlagged per model (supportsFunctionCalling). |
| JSON mode / response_format | Not documented | Ignoredresponse_format is ignored: ask for JSON in the prompt and validate it. | Per modelListed per model (response_format, structured_outputs). | Per modelFlagged per model (supportsResponseSchema). |
| Image input | Per modelFlagged per model (image_input) in the model list. | Per modelImage parts are forwarded and work only on servers with vision enabled. | Per modelDepends on the model. | Per modelFlagged per model (supportsVision). |
The same request against any of them
Set three environment variables and the code does not change between providers. Never put a key in source code.
curl "$LLM_BASE_URL/chat/completions" \
-H "Authorization: Bearer $LLM_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "'"$LLM_MODEL"'",
"messages": [
{"role": "system", "content": "You are a concise assistant for developers."},
{"role": "user", "content": "Explain what a race condition is in two sentences."}
],
"max_tokens": 300
}'| Provider | LLM_BASE_URL | Example LLM_MODEL |
|---|---|---|
| MolochAI | https://api.molochai.dev/api/v1 | qwen3.8-27b-uncensored |
| Featherless | https://api.featherless.ai/v1 | huihui-ai/Huihui-Qwen3.8-27B-abliterated |
| Venice | https://api.venice.ai/api/v1 | venice-uncensored-1-2 |
| OpenRouter | https://openrouter.ai/api/v1 | qwen/qwen3.8-27b |
| llama.cpp server (local, default port 9931) | http://localhost:9931/v1 | the name you set with --alias |
Base URLs are from each provider's documentation. The samples were run against a local mock server, not against these providers. Full walkthroughs: Python, Node.js, streaming.