Draft for review. Not listed, not indexed.

SillyTavern uncensored API setup

Connect SillyTavern to an uncensored API: the Custom (OpenAI-compatible) source, the key, the model id, roleplay samplers and what 300 messages cost.

Steps checked October 24, 2026

SillyTavern has no model of its own; it talks to whatever endpoint you give it. A SillyTavern uncensored API setup is the Chat Completion API set to the Custom (OpenAI-compatible) source, one base URL, one key and a model id from the catalog, then four sampler sliders that suit an abliterated roleplay build. We set it up on SillyTavern 1.19.0 and priced the evening on three real models.

What you will have at the end

A SillyTavern connection profile that reaches every uncensored model on one key, samplers tuned for an abliterated roleplay build, and a cost per evening you can read off the live catalog before you start. The whole connection is three values.

API
Chat Completion
Source
Custom (OpenAI-compatible)
Custom Endpoint
https://api.uncensoredllm.ai/v1
No /chat/completions on the end; SillyTavern adds it
Custom API Key
sk-ullm-live-…
Created in the console, shown once
Model
roleplay-uncensored
Any id from the Models page

The same three values drive every client on the docs page. SillyTavern is the one where the sampler sliders matter most, so this guide spends its time there.

Prerequisites

  • SillyTavern 1.19 or newer, running on your own machine or a server you control. We set this up on 1.19.0; the labels below are from that release.
  • A key from the console. It starts with sk-ullm- and is shown once. Prepaid balance from $10; a key with $0 on it connects but answers 402 on the first message.
  • One model id from the uncensored model list. The ids in this guide are roleplay-uncensored, cydonia-24b-v4.3, deepseek-v4-pro-uncensored.
  • A character card loaded, so the Test Message has a persona to answer from. The default Seraphina card that ships with SillyTavern is fine.

Connect SillyTavern to the uncensored API

Open the API Connections panel (the plug icon in the top bar). Everything below is on that one panel.

  1. Set API to Chat Completion. Text Completion is the other option; it needs an instruct template and is not what this guide covers.
  2. Set Chat Completion Source to Custom (OpenAI-compatible). The panel changes to show the custom fields.
  3. Paste https://api.uncensoredllm.ai/v1 into Custom Endpoint (Base URL). Keep the /v1. Do not append /chat/completions: SillyTavern adds the path itself and a doubled path answers 404.
  4. Paste your key into Custom API Key. SillyTavern stores it in its own secrets file on the machine running the server, not in the browser.
  5. Press Connect. SillyTavern calls GET /v1/models with your key and fills the model dropdown with every id the key can reach. Pick roleplay-uncensored from the list, or type it into Enter a Model ID if you would rather pin the id by hand.
  6. Leave Prompt Post-Processing on None. The API accepts system messages anywhere in the list, so the merge options are not needed.
  7. Press Test Message. A one-line reply in the chat window means the connection, the key and the model id are all right. A red toast means one of the three is wrong; the status code in it tells you which (see the troubleshooting section).
  8. Save the setup as a Connection Profile (the bookmark icon next to the profile dropdown). Name it after the model so you can keep one profile per build and switch mid-chat.

SillyTavern's own reference for this panel is the API Connections page in the official docs. It names the two API types and links each source's setup page.

Samplers for an abliterated roleplay build

The sliders live on the AI Response Configuration panel (the sliders icon, left of the plug). An abliterated build has the refusal direction removed from its weights, so there is no jailbreak text to maintain and the samplers only shape the prose. These are the values we start every roleplay profile from.

SettingStart valueWhy
Temperature0.91.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 P0.95Cuts the long tail of unlikely tokens. 1.0 disables it; going under 0.9 flattens the writing.
Top K00 is off. Top P already does the job; stacking both narrows the model twice.
Repetition Penalty1.051.0 is off. Roleplay tunes loop on pet phrases over long chats; 1.05 to 1.1 breaks the loop without mangling names.
Frequency Penalty0Leave at 0 when Repetition Penalty is set; two penalties on the same tokens make the model avoid its own character names.
Presence Penalty0Same reason. Raise to 0.2 only on a build that keeps restating the scene.
Max Response Length (tokens)300About one paragraph. A model that thinks before it answers needs 1,000 or more, or the reply is cut inside the thinking step.
StreamingonTokens appear as they are generated. The usage block still arrives at the end of the stream, so the charge is the same.

Context Size (tokens) is the one slider that changes the bill. SillyTavern sends up to this many tokens of card, lorebook and history 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.

ModelContext window in the catalogContext Size we set
Roleplay Uncensorednot published32768
Cydonia 24B v4.3131,072 tokens65536
DeepSeek V4 Pro Uncensorednot published32768

Context windows read from the live catalog on 2026-10-24. "Not published" means the developer states no window; 32K is the safe start there.

A 24B roleplay tune does not get better past about 32K of history; it gets slower and dearer. The number that matters more than the window is how much of it you fill, which is why the cost section below prices two fill levels.

Check it works

Test Message proves the UI path. This proves the API path with the same body SillyTavern sends: a system message for the persona, one user turn, the samplers above. Swap in your key and run it from a terminal.

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": "roleplay-uncensored",
6 "messages": [
7 {"role": "system", "content": "You are Mara, a lighthouse keeper on a storm-bound island. Stay in character."},
8 {"role": "user", "content": "The lamp went out an hour ago. What do you do?"}
9 ],
10 "temperature": 0.9,
11 "top_p": 0.95,
12 "max_tokens": 300,
13 "stream": false
14 }'

A 200 comes back in the OpenAI shape. The reply is in the first choice; the usage block is what the request is billed on.

json
1{
2 "id": "chatcmpl-…",
3 "object": "chat.completion",
4 "model": "roleplay-uncensored",
5 "choices": [
6 {
7 "index": 0,
8 "message": { "role": "assistant", "content": "I pull the oilskin over my head and…" },
9 "finish_reason": "stop"
10 }
11 ],
12 "usage": { "prompt_tokens": …, "completion_tokens": …, "total_tokens": … }
13}

Two headers ride on every answer: x-uplink-request-id for support and x-uplink-cost with the settled charge for that call. Add -i to the curl to see them. The daily real-model check sends a fixed prompt to every model each day and records whether the answer still matches, so the model behind the id is the one on the label.

What a 300-message evening costs

The per-token prices come from the live catalog. Three builds, in the order we would try them: a roleplay tune that answers at once, a 24B fine-tune with a published 131K window, and the uncensored DeepSeek V4 Pro for when the plot needs a bigger model.

Uncensored models and their prices per million tokens
Wire formats
Roleplay Uncensoredroleplay-uncensoredRoleplay$0.30$0.60openai
Cydonia 24B v4.3cydonia-24b-v4.3Roleplay$0.605$0.75131Kopenai
DeepSeek V4 Pro Uncensoreddeepseek-v4-pro-uncensoredUncensored$1.25$2.00openai

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

The worked example: 300 messages in one sitting, each reply about 250 tokens, each prompt carrying the card plus history. The short column fills about 6,000 tokens of context per message (a card and the last few dozen turns); the long column fills 16,000 (a lorebook and a long chat). Input is what dominates: 300 × 6,000 is 1,800,000 input tokens against 75,000 output tokens.

Model300 messages at 6,000 context300 messages at 16,000 context
Roleplay Uncensored$0.59$1.49
Cydonia 24B v4.3$1.15$2.96
DeepSeek V4 Pro Uncensored$2.40$6.15

Computed at render from the catalog prices above on 2026-10-24: messages × prompt tokens × input price, plus messages × 250 × output price. Your own numbers are in the console's usage view after the first chat.

Two settings move these figures more than the model choice. Context Size is the first: the long column is the short column with the same card and more history. The second is the per-message prompt SillyTavern builds from the card, the example dialogues and the lorebook; a 1,500-token card costs 1,500 tokens on every one of the 300 messages. Trim the card, not the replies. The full list of per-token rates is on the pricing page.

Troubleshooting by status code

SillyTavern puts the API's message field in the red toast and the full body in the server console. The body is always the OpenAI error shape; the code field is stable and says what to fix. These are the four you will meet, with the bodies the API sent on 2026-10-24.

401: the key

http
1HTTP 401
2{"error":{"message":"The API key is not valid.","type":"authentication_error","param":null,"code":"invalid_api_key"}}

The key in Custom API Key is wrong, truncated or revoked. "No API key was sent." in the message means the field is empty on the connection profile you are on. Create a fresh key in the console and paste it whole; several wrong keys in a row lock the address for a while and answer 429 instead.

404: the model id or the URL

http
1HTTP 404
2{"error":{"message":"No such model: roleplay-uncensord.","type":"not_found_error","param":null,"code":"model_not_found"}}

model_not_found means the id in Enter a Model ID is not in the catalog. Copy it from the model list rather than typing it. A 404 without that code, or a page of HTML, means the URL is wrong: a missing /v1 or an appended /chat/completions.

402: the balance

http
1HTTP 402
2x-uplink-topup-url: …
3{"error":{"message":"The prepaid balance does not cover this request. Top up at … to continue.","type":"insufficient_quota","param":null,"code":"insufficient_balance"}}

insufficient_balance is a prepaid balance at zero; the x-uplink-topup-url header on the response is the top-up page. Two cousins use the same status: spend_cap_reached is a new account's cap before its first payment settles, and monthly_limit_reached is a limit you set on the key in the console. A request that fails with 402 is not charged.

429: the rate

http
1HTTP 429
2retry-after: …
3{"error":{"message":"Rate limit reached for this key.","type":"rate_limit_error","param":null,"code":"rate_limited"}}

rate_limited means too many requests on one key in a short window; the retry-after header says how long to wait. In SillyTavern this shows up when a group chat fires several characters at once or when regenerate is pressed in a burst. Wait the seconds given and send again; nothing is charged for the refused calls.

A reply that is cut off

Not an error. finish_reason is length and Max Response Length is too low for the build. Builds that think before they answer spend their first few hundred tokens on the thinking step; raise the limit to 1,000 and the visible reply returns.

Questions

Any OpenAI-compatible endpoint works through the Custom source, so the question is which models it serves and at what price. For roleplay, pick an endpoint that lists abliterated and roleplay builds and prices them per token; the model list here shows both for every id. See the uncensored model list.

Yes. SillyTavern is an open-source front end and an API key is a paid service you are licensed to use. What you may generate is set by the provider’s acceptable-use terms, not by the client.

There is no free tier here; the balance is prepaid from $10 and settles per token, so a $10 top-up lasts as long as the usage table above says it does. Free endpoints exist elsewhere and usually rate-limit or log the chat. See per-token prices.

The same endpoint, through Janitor’s Proxy setting instead of SillyTavern’s Custom source: the URL takes /chat/completions on the end there, and the model id is typed rather than picked from a list. See the Janitor AI proxy guide.

The endpoint answered with a status other than 200 and SillyTavern is showing its message. The status code tells you which of the three settings to fix: 401 is the key, 404 is the model id or URL, 402 is the balance, 429 is the request rate.

For an abliterated build: temperature 0.9, Top P 0.95, Top K 0, Repetition Penalty 1.05, both OpenAI penalties at 0, and Context Size under the model’s window. Save it as a preset per model and adjust temperature first when a build drifts.

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.