Draft for review. Not listed, not indexed.

Janitor AI proxy setup: URL, key, model id

Set up a Janitor AI proxy in four fields: the proxy URL, your API key, a model id and the check that proves the key works, plus what 100 messages cost on three uncensored models.

Steps checked October 24, 2026

What you will have at the end

A Janitor AI proxy configuration with four values, a chat header that reads using proxy, and a receipt for the first message. The four values:

Name
UncensoredLLM
A label; anything works
Proxy URL
https://api.uncensoredllm.ai/v1/chat/completions
The full path, ending in /chat/completions
API key
sk-ullm-live-…
Created in the console, shown once
Model
glm-5.3-flash-uncensored
Any id from the Models page, typed exactly

Nothing else in Janitor changes. The character, your persona and the generation settings stay as they are. The model behind each message changes, and the bill moves to a prepaid balance that settles per token. The two-line version of this page, next to the same values for SillyTavern and the SDKs, is on the docs page.

Prerequisites

  • A Janitor AI account. Proxy mode is set in the browser, on desktop or on a phone; the panel is the same.
  • 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 Janitor's Model field needs. Three starting points are priced below.
  • About five minutes, including the refresh at the end.

The Janitor AI proxy fields, one by one

The labels below are the ones Janitor showed on 2026-10-18, the last time we ran this setup end to end inside Janitor. Janitor renames fields between releases. When a label differs from what you see, match the field by what it asks for: a URL, a key, a model name.

  1. Open any character chat. The provider button sits at the top of the chat and reads using janitor until you change it. Click it to open the API settings panel.
  2. Under Provider, choose Proxy. The other options send messages to Janitor's own models or to one named vendor. Proxy is the option that takes any chat completions URL.
  3. Under Proxy configurations, click + New. A blank configuration opens with a name field, the proxy URL field, the API key field and the model field.
  4. Name (or Configuration name): UncensoredLLM. It is a label for your own list and nothing reads it.
  5. Proxy URL: https://api.uncensoredllm.ai/v1/chat/completions. The whole path, ending in /chat/completions. The base URL that the SDKs take, https://api.uncensoredllm.ai/v1, is not enough here: Janitor posts to the address exactly as typed, and the base URL on its own answers 404 route_not_found (checked 2026-10-24).
  6. API key: your key, the whole string starting sk-ullm-. No Bearer in front of it; Janitor builds the Authorization header itself.
  7. Model: a model id exactly as the Models page prints it, for example glm-5.3-flash-uncensored. A display name such as "GLM-5.3 Flash Uncensored" answers 404 model_not_found, because the API matches on the id.
  8. Custom prompt, where the panel offers one: leave it empty. The builds on this site answer in character without a jailbreak or a prefill. A pasted jailbreak only adds tokens to every message, and tokens are what you pay for.
  9. Click Add, then Save at the bottom of the panel.
  10. Refresh the page. Janitor picks up a new proxy configuration only after a reload (seen on 2026-10-18). The header now reads using proxy. A new Janitor account asks for a persona name before the first message goes out.

To switch models later, edit the Model field in the same configuration, save, and refresh again. The URL and key stay; one key covers every id on the Models page.

Check the key before you chat

Janitor's panel has a test button near the key field, labelled Check API key or Check proxy depending on the release. It sends one short chat completion to the Proxy URL with the key and model you typed. A pass means all three values are right at the same time. A failure carries the status code, and the table under Troubleshooting says which field to fix.

The same test from a terminal, so you can read the whole answer. Replace the key and keep the rest.

curl
1curl https://api.uncensoredllm.ai/v1/chat/completions \
2 -H "Authorization: Bearer sk-ullm-live-…" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "model": "glm-5.3-flash-uncensored",
6 "max_tokens": 120,
7 "messages": [
8 {"role": "system", "content": "You are Mira, a ship mechanic on a cargo hauler. Stay in character. Reply in two short sentences."},
9 {"role": "user", "content": "The reactor light is blinking again. What do we do?"}
10 ]
11 }'

What came back when we sent exactly that on 2026-10-24 (request id ul_fe0aadee6b687f575a0fb599), with the reply text left out:

response
1HTTP/2 200
2content-type: application/json; charset=utf-8
3x-uplink-request-id: ul_fe0aadee6b687f575a0fb599
4x-uplink-model: glm-5.3-flash-uncensored
5x-uplink-charge: 0.000068
6
7{
8 "id": "chatcmpl_proxy_d413927fc7e04e78923c1c9901241c93",
9 "model": "glm-5.3-flash-uncensored",
10 "choices": [
11 {
12 "finish_reason": "length",
13 "message": { "role": "assistant", "content": "…" }
14 }
15 ],
16 "usage": {
17 "prompt_tokens": 786,
18 "completion_tokens": 120,
19 "total_tokens": 906,
20 "completion_tokens_details": { "reasoning_tokens": 20 }
21 }
22}

Three things to read off it. usage counted 786 prompt tokens and 120 completion tokens, 20 of them reasoning; Janitor's card, persona and history land in prompt_tokens the same way. The x-uplink-charge header said $0.000068 for the exchange, settled from the prepaid balance at the model's per-token price. finish_reason is length because the request capped the reply at 120 tokens; Janitor sets its own cap from your generation settings.

The body and the answer follow the chat completions format, which is why Janitor, SillyTavern and any client with a custom URL field all work from the same three values. x-uplink-request-id identifies the request if you write to support. A request that fails before the model answers is not charged.

Which model to put in the Model field

The proxy walkthroughs that ranked for "janitor ai proxy" on 2026-10-19 pair a stock flash model with a jailbreak prefill that rides along on every message. The uncensored build of the same family takes the Model field with no prefill at all. Three starting points, priced from the live catalog:

Uncensored models and their prices per million tokens
GLM-5.3 Flash Uncensoredglm-5.3-flash-uncensoredUncensored$0.14$0.3802
DeepSeek V4 Pro Uncensoreddeepseek-v4-pro-uncensoredUncensored$1.25$2.00
GLM-5.3 Uncensoredglm-5.3-uncensoredUncensored$0.30$0.873

Prices per million tokens, read from the live catalog on 2026-10-24.

  • GLM-5.3 Flash Uncensored, glm-5.3-flash-uncensored: the low-cost default. It carried the test request above and it is the first model we try on a new character.
  • DeepSeek V4 Pro Uncensored, deepseek-v4-pro-uncensored: for anyone following a "DeepSeek on Janitor" guide. The deepseek-chat id those guides name is not on this list; this is the uncensored DeepSeek build that is.
  • GLM-5.3 Uncensored, glm-5.3-uncensored: the full-size GLM for long scenes, when the flash build's replies read thin.

A roleplay fine-tune is the other direction to go: roleplay-uncensored is trained on long-form character chat and lists at $0.60 per million output tokens today. The full list is on the Models page, abliterated and roleplay builds marked.

Each id is sent a fixed prompt every day and the answer is compared with the model's known answer. On 2026-10-24 the check covered 133 of the models listed on this site and 125 answered as the model named. All three models above were among them. The method and the day's verdicts are at /proof.

What 100 messages cost

A Janitor message carries more than the words you type. The character card, your persona, the scenario and as much chat history as fits 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-10-24; the arithmetic is tokens times price, nothing else.

ModelOne message100 messages100 messages, 16k context
glm-5.3-flash-uncensored$0.0007$0.0674$0.2354
deepseek-v4-pro-uncensored$0.0056$0.56$2.06
glm-5.3-uncensored$0.0015$0.1462$0.5062

Put another way, the smallest top-up of $10 buys about 14,835 messages of that size on glm-5.3-flash-uncensored at today's price. The balance does not expire, so an idle month costs nothing.

Two things move the number. Context length matters more than reply length: the 16,000-token column is the same reply with a fuller history. And a jailbreak prompt in the Custom prompt field 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.

Is a Janitor AI proxy safe

When you switch proxy on, Janitor warns that the proxy operator may log your IP address and your chats. The warning is correct. Every message goes to the URL in the field, and whoever runs that URL sees it. So the question is who is behind the URL and what they keep.

What this one keeps, 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 the gateway 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, Janitor on one and SillyTavern on another, so you can revoke one without touching the other.

The free community proxies that fill the Reddit lists publish no retention statement and have no one you can hold to one. A paid key you control, from a provider that writes down what it stores, is the trade you make for a few cents per hundred messages.

Troubleshooting by error code

Janitor shows the status code and sometimes the message. The bodies below are what the API sends, with a stable code field you can match on. None of them costs anything: a request that fails before the model answers is not charged.

StatuscodeCauseFix
401invalid_api_keyThe key is missing, mistyped, revoked, or pasted into the URL instead of the key field.Copy it again from the console into the API key field, save, refresh.
404route_not_foundThe Proxy URL stops at /v1 or misspells the path.Set it to https://api.uncensoredllm.ai/v1/chat/completions.
404model_not_foundThe Model field names an id that is not on the list, such as deepseek-chat from an older guide, or a display name.Paste an id from the Models page.
402insufficient_balanceThe prepaid balance does not cover the request.Top up in the console; the response carries the top-up link.
402monthly_limit_reached, spend_cap_reachedThe key's monthly spend limit, or a new account's cap before its first payment settles.Raise the key's limit, or wait for the payment to settle.
429rate_limitedMore than 600 requests a minute on the key, more than 50 in flight on the account, or more than 60 a minute in an account's first 24 hours.Wait the seconds in retry-after. A Janitor chat never reaches these on its own; a script sharing the key can.
429upstream_rate_limitedThe model's route is busy.Send the message again after retry-after, or switch the Model field for a minute.
400invalid_requestNo model named, or the body is not what the route expects.Check the Model field is filled and the URL ends in /chat/completions.
403scope_deniedThe 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 Model field.
502upstream_errorThe model's route failed or the answer was cut off before it reached you.Regenerate after retry-after. Nothing was charged.

The first two bodies below were captured against the live API on 2026-10-24; the other two are the API's own wording for those codes.

errors
1HTTP 401, the key is wrong (captured 2026-10-24)
2{"error":{"message":"The API key is not valid.","type":"authentication_error","param":null,"code":"invalid_api_key"}}
3
4HTTP 404, the Proxy URL stops at /v1 (captured 2026-10-24)
5{"error":{"message":"No such route.","type":"not_found_error","param":null,"code":"route_not_found"}}
6
7HTTP 404, the Model field names an id that is not on the list
8{"error":{"message":"No such model: deepseek-chat.","type":"not_found_error","param":null,"code":"model_not_found"}}
9
10HTTP 402, the balance is empty
11{"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 an answer that ignores the character is a settings problem, not a proxy problem: a very low max tokens or a temperature far from 1 in Janitor's generation settings shows up that way. The same model id in SillyTavern with default sampling is the quick comparison.

Questions

Proxy is the Provider option that sends each message to a chat completions URL you choose instead of to Janitor’s own models. The reply comes from the model named in the Model field, and you pay that provider per token instead of a Janitor plan.

https://api.uncensoredllm.ai/v1/chat/completions. Janitor wants the full chat completions address, not the base URL; the base URL alone answers 404 route_not_found.

One whose operator you can name and whose retention you can read, with your own key and a spend limit on it. Here that is the URL above, a key from the console and a model id such as glm-5.3-flash-uncensored. See the Models page.

Janitor stops sending your messages to its own models and posts them to the URL in your configuration. Your characters, personas and chats stay where they are on Janitor; only the model that writes the replies changes, and its bill lands on the proxy account.

With a proxy you pick the model, so the answer depends on the id in the Model field. An uncensored or roleplay build stays in character without a jailbreak prefill, which is the usual reason people switch, and you pay per token rather than per month.

SillyTavern takes the same base URL, key and model id as a Custom OpenAI-compatible source, runs on your own machine and keeps the chat logs locally. One key works in both at once. See the SillyTavern setup.

Get a keyPrepaid from $10, no subscription.

New models and price changes,once a month.

New uncensored builds with their prices, price moves, and what the daily model check found.