What you will have at the end
A Chub AI chat that sends every message to an uncensored model on your own prepaid key instead of to one of Chub's built-in APIs. The connection is three values, entered in Chub's panels: Secrets for the URL and the key, and a model field that the walkthroughs ranking for this query place under Configuration with the generation settings.
- Secrets, API
- OpenAI, reverse proxy
- Proxy URL
- https://api.uncensoredllm.ai/v1Base URL ending in /v1; https://api.uncensoredllm.ai/v1/chat/completions if the check answers 404 route_not_found
- Proxy key
- sk-ullm-live-…Created in the console, shown once
- Model field
- uncensored-ai-roleplayAny id from the Models page, typed exactly
Your characters, personas, lorebooks and chats stay on Chub. What changes is the model that writes the replies and where the bill lands: a balance that settles per token, not a Chub subscription tier. The same three values drive every client on the docs page; the SillyTavern, Janitor AI, RisuAI and Agnai guides use them too, and the best uncensored LLM leaderboard picks the model id.
Prerequisites
- A Chub AI account. The Secrets and Configuration panels are in the chat page's options menu; Chub's docs place that menu under the hamburger button at the top right of the chat page.
- A key. Create one in the console. The first top-up is $10, there is no subscription, and bonus credit is added on larger top-ups (+5% at $200, +10% at $500, +15% at $1,000; these are the tiers the console applies). The key starts with
sk-ullm-and is shown once, so copy it before you close the dialog. - A model id from the Models page. Every entry there is the exact string Chub's model field needs. Four starting points are priced below.
- A character opened in a chat, so the connection check has a definition to answer from.
Secrets: the proxy URL and the key
Chub's API Connections page lists OpenAI as usable "with either an API Key or the use of a reverse proxy". A reverse proxy, in Chub's sense, is any URL that answers the chat completions format; this API is one. The docs do not print the labels of the URL and key fields, so each step below names the field by what it asks for. Match on that if your release words it differently.
- Open a chat with any character and open the options menu (the hamburger button at the top right of the chat page, per Chub's chat page docs). Choose Secrets, which the docs describe as the place where you set up the API connection used to chat.
- Pick the OpenAI API and switch it from your own key to the reverse proxy option, the one that takes an address.
- In the proxy URL field, paste
https://api.uncensoredllm.ai/v1, with the/v1and nothing after it. That is right when the app appends the chat completions path itself. If the check in the next step answers 404route_not_found, your release posts to the address exactly as typed: replace the value withhttps://api.uncensoredllm.ai/v1/chat/completions. The API serves both forms; only one of them matches what the app sends. - In the proxy key field, paste your key, the whole string starting
sk-ullm-. NoBearerin front of it. - Save the Secrets panel before you leave it. If your release shows a check button for the proxy (the walkthroughs that rank for this query describe one; Chub's docs do not), press it: it sends one short chat completion to the URL with the key, and a pass means both are right. Without one, the first message in the chat is the check. Either way a failure carries a status code, and the table under Troubleshooting says which field to fix.
Chub's docs recommend official keys over third-party reverse proxies because a proxy operator "gain[s] access to your data and IP address". That is accurate for any URL you paste here, this one included; the retention section below says what this operator keeps, so you can judge it against a free proxy that publishes nothing.
Configuration: the model id and the prompt settings
Chub's chat page docs put the prompt structure and the generation parameters under Configuration, in the same options menu, and note that Presets save those settings. The docs do not place the model field; the walkthroughs that rank for this query put it in Configuration's prompt structure, next to a choice of API. Three things to set there.
- Where the panel asks which API the prompt is for, choose OpenAI, so the chat uses the reverse proxy you just saved.
- In the model field, enter a model id exactly as the Models page prints it, for example
uncensored-ai-roleplay. The API matches on the id, so a display name such as "GLM-5.3 Flash Uncensored", or a name from another provider's list such asgpt-4, answers 404model_not_found. If your release offers the model as a closed list with no way to type an id, the check will say so with that code; write to support with the request id and we will tell you what the current build does. - Under the API Settings that Chub's docs list for every API, leave the System Prompt (the docs also call it the Jailbreak Prompt) free of any jailbreak text, and leave Post History Instructions empty unless a character needs a formatting rule. The builds on this site answer in character without a prefill. A pasted jailbreak rides on every message, and tokens are what you pay for.
Save the preset under a name you will recognise, one per model if you switch builds. The URL and key stay in Secrets; one key covers every id on the Models page.
Generation settings for an uncensored build
Chub's docs name five generation settings: Temperature, Presence Penalty, Frequency Penalty, Top K and Top P, with one rule, "You should either alter Temperature or Top P, but not both." An uncensored or abliterated build has no refusal text to steer around, so these only shape the prose. The values we start every Chub preset from, with Temperature as the one we move:
| Setting | Start value | Why |
|---|---|---|
| Temperature | 0.9 | 1.0 is the model's own distribution. 0.9 keeps the variety and trims the odd word salad; drop to 0.7 if a build rambles. |
| Top P | 1.0 | Off, per Chub's own rule of moving one or the other. Move Temperature instead. |
| Top K | 0 | 0 is off. Narrowing the token set on top of Temperature flattens the writing. |
| Frequency Penalty | 0 | Raise to 0.1 or 0.2 only when a build repeats its pet phrases over a long chat. Higher makes it avoid its own character names. |
| Presence Penalty | 0 | Same reason. 0.2 at most, on a build that keeps restating the scene. |
Chub's docs stop at those five. Two more values shape every request Chub sends, and the walkthroughs that rank for this query show both as settings; set them under whatever label your release gives them. The response length, in tokens: 300 is about one paragraph, and a model that reasons before it answers needs 1,000 or more, or the reply is cut inside the reasoning step and arrives empty.
The context limit is the value that changes the bill. Chub sends the character definition, your persona, lorebook entries and as much history as the limit allows on every message. Set it from the model's context_window in the catalog, with 16K of headroom and a 64K cap, and never above the window: a prompt past the window is refused, not trimmed. Chub's Chat Memory (a summary sent as context, per the docs) is the way to keep a long story in a short window.
| Model | Context window in the catalog | Context limit we set |
|---|---|---|
| Uncensored AI Roleplay | 128,000 tokens | 65536 |
| GLM-5.3 Flash Uncensored | not published | 32768 |
| GLM-5.3 Uncensored | not published | 32768 |
| DeepSeek V4 Pro Uncensored | not published | 32768 |
Check it works
A reply in the chat proves the UI path. This proves the API path with the same shape Chub sends: a system message for the character, one user turn, the settings above. Replace the key and run it from a terminal.
curl -i https://api.uncensoredllm.ai/v1/chat/completions \ -H "Authorization: Bearer sk-ullm-live-…" \ -H "Content-Type: application/json" \ -d '{ "model": "uncensored-ai-roleplay", "max_tokens": 300, "temperature": 0.9, "messages": [ {"role": "system", "content": "You are Tomas, the keeper of a mountain inn snowed in for the week. Stay in character. Reply in two short sentences."}, {"role": "user", "content": "The road is closed again. Is there a room left?"} ] }'A 200 comes back in the chat completions format. The reply is in the first choice; the usage block is what the request is billed on, and Chub's definition, persona and history land in prompt_tokens the same way.
HTTP/2 200content-type: application/json; charset=utf-8x-uplink-request-id: ul_…x-uplink-model: uncensored-ai-roleplayx-uplink-charge: 0.00… { "id": "chatcmpl-…", "object": "chat.completion", "model": "uncensored-ai-roleplay", "choices": [ { "index": 0, "message": { "role": "assistant", "content": "…" }, "finish_reason": "stop" } ], "usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }}Two headers ride on every answer: x-uplink-request-id identifies the request if you write to support, and x-uplink-charge carries the settled charge for that call. A finish_reason of length means the response length cap cut the reply; on a model that reasons first, that is the empty-reply case in the troubleshooting table. A request that fails before the model answers is not charged.
Which model to put in the model field
The Chub walkthroughs that rank for "chub ai api key" pair a stock vendor model with a jailbreak in the System Prompt that rides along on every message. An uncensored build takes the model field with no prefill at all. Four starting points, priced from the live catalog:
| Uncensored AI Roleplay | Roleplay | $0.60 | $2.34 |
| GLM-5.3 Flash Uncensored | Uncensored | $0.1053 | $0.3685 |
| GLM-5.3 Uncensored | Uncensored | $0.282 | $0.846 |
| DeepSeek V4 Pro Uncensored | Uncensored | $0.97 | $1.94 |
- Uncensored AI Roleplay,
uncensored-ai-roleplay: the roleplay-trained default. It answers at once, with a context window of 128,000 tokens, and is the first id we try on a new character. - GLM-5.3 Flash Uncensored,
glm-5.3-flash-uncensored: the low-cost option for long sessions, when the per-message number matters more than prose. - GLM-5.3 Uncensored,
glm-5.3-uncensored: the full-size GLM for long scenes, when the flash build's replies read thin. - DeepSeek V4 Pro Uncensored,
deepseek-v4-pro-uncensored: the biggest model of the four, for plots that need it. Give it a response length of 1,000 or more.
A 24B roleplay fine-tune is the other direction: cydonia-24b-v4.3 is trained on long-form character chat with a published context window and lists at $0.60 per million output tokens today. The full list is on the Models page, abliterated and roleplay builds marked; the uncensored hub explains the difference.
Each id is sent a fixed prompt every day and the answer is compared with the model's known answer. On 2026-11-09 the check covered 170 of the models listed on this site and 161 answered as the model named. All four models above were among them. The method and the day's verdicts are at /proof.
What 100 messages cost
A Chub message carries more than the words you type. The character definition, your persona, matching lorebook entries and as much history as the context limit allows go out with every turn. We cost one message at 4,000 tokens in and 300 out, and the same message late in a long chat at 16,000 tokens in. Prices per million tokens come from the live catalog on 2026-11-09; the arithmetic is tokens times price, nothing else.
| Model | One message | 100 messages | 100 messages, 16k context |
|---|---|---|---|
uncensored-ai-roleplay | $0.0031 | $0.3102 | $1.0302 |
glm-5.3-flash-uncensored | $0.0005 | $0.0532 | $0.1795 |
glm-5.3-uncensored | $0.0014 | $0.1382 | $0.4766 |
deepseek-v4-pro-uncensored | $0.0045 | $0.4462 | $1.6102 |
Put another way, the smallest top-up of $10 buys about 3,223 messages of that size on uncensored-ai-roleplay at today's price. Prepaid credit does not expire, so an idle month costs nothing.
Two things move the number. The context limit matters more than reply length: the 16,000-token column is the same reply with a fuller history. And a jailbreak in the System Prompt is paid for on every message, which is the other reason to leave it empty on an uncensored build. The pricing page has the per-token price of every model and the bonus tiers.
What the operator keeps
Chub's warning about reverse proxies is correct: every message goes to the URL in Secrets, and whoever runs that URL sees it. So the question is who is behind the URL and what they keep. As the privacy page states it: one usage record per request (request id, model, token counts and the charge); SHA-256 fingerprints of each request and response, never the text, so a signed receipt can be checked against what was billed; and request bodies only when you turn replay on for a key, for 7 days. With replay off, prompts and replies pass through and are not written anywhere. The key itself is stored as a salted hash and shown once.
Two habits cost nothing. Set a monthly spend limit on the key in the console, so a key that leaks from a shared screenshot cannot drain the balance; the API then answers 402 monthly_limit_reached instead of spending on. And make a separate key per app, Chub on one and SillyTavern on another, so you can revoke one without touching the other.
Troubleshooting
When a generation fails, the status code behind it is the API's, and each one names a field.
| Code | Body says | Cause | Fix |
|---|---|---|---|
| 401 | invalid_api_key | The proxy key field is wrong or has a space on the end. | Re-copy the key from the console into Secrets and save. A revoked key answers the same way. |
| 404 | route_not_found | The URL Chub posts to is not the chat completions route. | Switch the proxy URL between https://api.uncensoredllm.ai/v1 and https://api.uncensoredllm.ai/v1/chat/completions; one of them matches what your release appends. |
| 404 | model_not_found | The model field holds a display name, a name from another provider's list or a typo. | Copy the id from the Models page as written. The body names the id it received. |
| 402 | insufficient_balance | The prepaid balance is empty. | Top up in the console. monthly_limit_reached is the same code when the key's own monthly limit was hit; raise it or wait for the month. |
| 403 | scope_denied | The key is limited to a list of models and the model field names another. | Add the model to the key in the console, or change the id. |
| 429 | rate_limited or upstream_rate_limited | Too many requests on the key, or the model's route is busy. | Regenerate after retry-after, or switch the model id for a minute. |
| 502 | upstream_error | The model's route failed or the answer was cut off before it reached you. | Regenerate after retry-after. Nothing was charged. |
| 200 | an empty reply | The response length cap was spent inside a reasoning step, so content came back empty with finish_reason length. | Raise the response length to 1,000 or more, or switch to a build that answers without reasoning, such as uncensored-ai-roleplay. |
The bodies below are the API's own wording for the common codes. The last line of each is what to search for in Chub's error text.
HTTP 401, the key is wrong{"error":{"message":"The API key is not valid.","type":"authentication_error","param":null,"code":"invalid_api_key"}} HTTP 404, the URL does not reach the chat completions route{"error":{"message":"No such route.","type":"not_found_error","param":null,"code":"route_not_found"}} HTTP 404, the model field names an id that is not on the list{"error":{"message":"No such model: gpt-4.","type":"not_found_error","param":null,"code":"model_not_found"}} HTTP 402, the balance is empty{"error":{"message":"The prepaid balance does not cover this request. Top up at … to continue.","type":"billing_error","param":null,"code":"insufficient_balance"}}A 200 with a reply that ignores the character is a settings problem, not a connection problem: a System Prompt that fights the definition, or a Temperature far from 1, shows up that way. The same model id in SillyTavern with the samplers from that guide is the quick comparison.
Questions
In Secrets, which Chub’s docs describe as the place where you set up the API connection used to chat. Open a chat, open the options menu at the top right, choose Secrets, pick OpenAI, switch to the reverse proxy option and paste the URL and the key. The model id is a separate field; the walkthroughs that rank for this query place it under Configuration.
From the provider whose model you want to use. Here: create a key in the console, top up from $10, and paste the sk-ullm- string into Chub’s proxy key field. The key is shown once and works in Chub, SillyTavern and the SDKs at the same time. See the console.
Chub’s own docs warn that the operator of a reverse proxy sees your data and IP address. A prepaid key costs per token with no subscription; the cost table above puts 100 messages on four uncensored models in cents.
The one that lets you name the model, publish its price and state what it keeps. On this API the model field takes any id on the Models page; uncensored-ai-roleplay is the roleplay-trained default and glm-5.3-flash-uncensored the low-cost one. See the Models page.
The usual cause is the response length cap being spent inside a model’s reasoning step, so the content comes back empty with finish_reason length. Raise the cap to 1,000 or more, or use a build that answers without reasoning. A wrong model id is the other cause; that one comes back as 404 model_not_found rather than empty.
A generation error in the chat means the request to the proxy URL came back without a reply. The status code behind it is the API’s: 401 is the key, 404 is the URL or the model id, 402 is the balance, 429 is a rate limit. The troubleshooting table above maps each one to the field to fix.
Every model above is on the uncensored model list with its live price per million tokens. Per-token pricing sets the whole catalog side by side, and the family directory groups the builds by base model.