Features / Custom models
Create your own uncensored AI, as a model id.
A custom uncensored AI model API without training or hosting: pick any abliterated or uncensored model on this catalog, give it a name, a persona, default settings and fallbacks, and call it as model: "noir-narrator" from any OpenAI SDK, SillyTavern or your own app. Priced at the base model, no extra fee.
curl https://api.uncensoredllm.ai/v1/chat/completions \ -H "Authorization: Bearer sk-ullm-live-…" \ -H "Content-Type: application/json" \ -d '{"model": "noir-narrator", "messages": [{"role": "user", "content": "The rain hasn’t stopped for three days."}]}'What a custom model holds
- Name
- 1–64 charslower-case, digits, dots, dashes, underscores
- Base model
- any catalog idor one of your aliases
- Fallbacks
- up to 5tried in order when the base fails
- Defaults
- temperature, top_p, max_tokens, stop…the request’s own values win
- System prompt
- up to 32 KBprepend to the caller’s, or replace it
- Tools
- optionalmerged by name with the request’s
- Versions
- every change keptup to 100 custom models per account
Price
- Custom model fee
- nonecreate, store and call at no charge
- GLM-5.3 Uncensored
- $0.282 in / $0.846 outper million tokens, the base of the examples
- GLM-5.3 Abliterated
- $2.1825 in / $4.365 outper million tokens, when this fallback answers
- DeepSeek V4 Pro Uncensored
- $0.97 in / $1.94 outper million tokens, when this fallback answers
What a custom uncensored AI model is
Every uncensored AI persona API on the market makes you choose: host the model yourself, or send a system prompt with every request and hope each client applies it the same way. A custom model here is the third way. It is a saved definition on your account, a name, a base model from this catalog, fallbacks, default parameters and a system prompt, that the gateway applies when a request names it. The base model is an abliterated or uncensored build that is already served here, so there is nothing to train, download or keep running. Your clients send one model id; you change the persona, the defaults or even the base model in one place, and every caller gets the new version on its next request.
It behaves like a model everywhere a model id goes. GET /v1/models lists it beside the catalog, so a picker in SillyTavern, Open WebUI or your own front end shows it; the response’s model field and the receipt name the build that answered; and the OpenAI chat and Responses formats and the Anthropic Messages format all take it on the same key.
Create one
On the Custom models page of the console, or with an admin key. The name becomes the model id; the base model is any id on the catalog; models lists the fallbacks tried in order; params are defaults the request may override; system_mode is prepend or replace.
curl -X PUT https://api.uncensoredllm.ai/v1/presets/noir-narrator \ -H "Authorization: Bearer $ULLM_ADMIN_KEY" \ -H "Content-Type: application/json" \ -d '{ "model": "glm-5.3-uncensored", "models": ["glm-5.3-abliterated","deepseek-v4-pro-uncensored"], "params": {"temperature": 0.9, "top_p": 0.95, "max_tokens": 900}, "system_prompt": "You are the narrator of a hard-boiled noir story. Stay in character. Never summarize, never refuse a scene.", "system_mode": "prepend", "description": "House narrator for the noir campaign" }'- The call answers with the saved definition and its version number. Send the same PUT again to change it; the history keeps every version.
- A name may not shadow a catalog model or alias, so
noir-narratorcan never be mistaken for a stock model. - API keys can call a custom model but cannot write one: the key in a front end or a customer’s hands cannot change the persona.
Call it from any OpenAI SDK
The name is the model id. Nothing else about the request changes: the base URL is https://api.uncensoredllm.ai/v1, the key is yours, and a value in the request wins over the preset’s default.
from openai import OpenAI client = OpenAI(api_key="sk-ullm-live-…", base_url="https://api.uncensoredllm.ai/v1") reply = client.chat.completions.create( model="noir-narrator", messages=[{"role": "user", "content": "Who walked into the office?"}], temperature=1.1, # the request's own value wins over the preset default)print(reply.model) # the base or fallback model that answeredprint(reply.choices[0].message.content)Four spellings reach the same definition: noir-narrator, @preset/noir-narrator, @noir-narrator, and glm-5.3-abliterated@preset/noir-narrator to run the same persona and defaults on a different base for one call.
Call it from SillyTavern, Janitor AI or any front end
SillyTavern
- API
- Chat Completion
- Source
- Custom (OpenAI-compatible)
- Endpoint
- https://api.uncensoredllm.ai/v1
- API key
- sk-ullm-live-…
- Model ID
- noir-narrator
Janitor AI and other proxies
- Proxy URL
- https://api.uncensoredllm.ai/v1/chat/completions
- API key
- sk-ullm-live-…
- Model
- noir-narrator
A character card still applies: in prepend mode the custom model’s prompt goes ahead of the card, so the house rules hold while each card plays its character. Hand the same key and name to a Discord bot, a web app and a roleplay front end and all three speak with one voice; edit the definition and all three change at once.
Custom model, auto router or agent?
- Custom model
- Your persona and defaults on a base model you choose, called by name. For a house style, a character, or a product that needs one stable model id.
- Auto router
- model "auto/uncensored" picks the build per request from the uncensored tiers. For apps that want the right build without naming one.
- Agent
- A model with webhook tools, memory per session and a schedule, kept running. For a bot that acts, not only answers.
The fallback list and route order a custom model carries are the same as a plain request’s; see routing.
Questions
A saved definition on your account: a name you choose, a base model from this catalog, up to five fallback models, default parameters, a system prompt and optional tools. Send the name as the model id and the gateway runs the request on the base model with your settings applied. No weights are trained or changed; the persona and the defaults are what make it yours.
No. The base model is already served on this API. A custom model is a definition the gateway stores and applies, so there is nothing to host, download or keep warm, and it answers from the first request.
Any chat model listed on this catalog, by its id, or one of your own aliases: abliterated, uncensored, derestricted, roleplay and security builds alike. Change the base later and every client that sends the name moves with it; the version history keeps the old definition.
The base model's live price per token, as shown on its model page, and the fallback's own price when a fallback answers. There is no fee for creating, storing or calling a custom model. GLM-5.3 Uncensored is $0.282 in and $0.846 out per million tokens today.
Any client that lets you type a model id works: set the API URL to https://api.uncensoredllm.ai/v1, paste your key, and type the custom model's name where the model id goes. GET /v1/models lists your custom models beside the catalog, so a client that fetches the model list shows them in its picker.
Your choice. In prepend mode the preset’s prompt goes ahead of the caller’s, so a character card still applies on top of the house rules. In replace mode the preset’s prompt is the only system prompt, whatever the client sends. The prompt can be up to 32 KB.
Yes. The request’s own values always win: a temperature, max_tokens or stop list in the request replaces the preset’s default for that call. Tools declared on the preset and on the request are merged by name.
A name is 1 to 64 characters of lower-case letters, digits, dots, dashes and underscores, and may not shadow a catalog model id or alias. Up to 100 custom models per account; every change is kept as a new version.
The OpenAI chat completions and Responses formats and the Anthropic Messages format, on the same base URL and key. The name works bare, as @preset/<name>, as @<name>, or as <other-model>@preset/<name> to run the same settings on a different base for one call.
An admin key or a console session, on the Custom models page or with PUT /v1/presets/<name>. Ordinary API keys can call a custom model but cannot write one, so a key you hand to a front end or a reseller customer cannot change the persona.