Novita AI’s DeepSeek models work in SillyTavern through the Custom (OpenAI-compatible) connection. Set the custom endpoint to https://api.novita.ai/openai, paste a Novita API key, and enter an exact model ID from the Model Hub. Do not add /v1 and never paste /chat/completions — SillyTavern appends the route itself. These are the settings that produce a working connection today:
| Setting in SillyTavern | Value to enter |
|---|---|
| Chat Completion Source | Custom (OpenAI-compatible) |
| Custom Endpoint (Base URL) | https://api.novita.ai/openai |
| Custom API Key | Your Novita API key |
| Model ID | deepseek/deepseek-v4.1-flash |
The rest of this guide covers creating the key, walking the full menu path, proving the connection with a real request, choosing among the DeepSeek models Novita AI hosts, and the errors you are most likely to hit.
Create a Novita API key
SillyTavern needs a key from your own Novita AI account. Open Key Management, select Add New Key, and copy the value. Store it somewhere your SillyTavern machine can reach, because generation on Novita AI is billed per token and the account behind the key must have credit available.
Keep track of which account issued the key. If you have more than one Novita AI account, a key from the other account authenticates correctly but belongs to a different balance and key list, which makes “it works in the dashboard but not in SillyTavern” confusing to diagnose.
One key covers every model in the catalog; Novita AI does not scope keys per model. What changes between models is the ID you type into SillyTavern.
Enter the settings in SillyTavern
All connection settings live in the API Connections panel, opened from the plug icon in the top bar. The path is short but easy to miss, because the API type and the source are two separate dropdowns on the same screen.
- Open API Connections and set the API type to Chat Completion. Text Completion uses a different request shape and will not work with Novita AI’s chat models.
- In Chat Completion Source, choose Custom (OpenAI-compatible). Do not pick the built-in DeepSeek source: that one points at DeepSeek’s own platform, not at Novita AI.
- Fill Custom Endpoint (Base URL) with
https://api.novita.ai/openai. - Paste the key into Custom API Key.
- In Enter a Model ID, type the exact ID, for example
deepseek/deepseek-v4.1-flash. You can also pick from Available Models, which populates from the endpoint’s model list. - Click Connect, then Test Message. A one-line reply confirms the endpoint, key, and model ID agree with each other.
The two dropdowns are independent: Chat Completion selects the protocol, and Custom (OpenAI-compatible) selects where the request goes.
SillyTavern writes /chat/completions onto whatever base URL you provide, so the endpoint field must stop at /openai. If you paste the full request path, the resulting URL contains the suffix twice and the gateway answers with a plain-text 404.
Does the Novita endpoint need /v1?
No. Use https://api.novita.ai/openai exactly as Novita AI publishes it. Both forms were tested against the live API on October 19, 2026: https://api.novita.ai/openai/chat/completions and https://api.novita.ai/openai/v1/chat/completions each returned HTTP 200 for a chat completion. The /v1 variant works because the gateway accepts both prefixes, not because SillyTavern requires it.
Choose the slash-free form anyway. It matches the base URL in Novita AI’s model pages and API examples, so the same value works when you copy it into the OpenAI SDK, a proxy, or a different client later. The advice to “try adding /v1” in SillyTavern’s documentation exists for self-hosted backends such as LM Studio and LiteLLM, whose routes live under that prefix. It is a fallback, not a default, and appending it here adds a second thing to remember with no behavioral gain.
There is one character you should actively remove: a trailing slash. https://api.novita.ai/openai/ produces a doubled slash before the appended route, the gateway redirects that path with a 301, and the redirected request lands on a path with no handler. The result is a plain-text 404 page not found that looks nothing like an authentication or model error, which sends most people hunting in the wrong place.
Verify the connection with a real request
Before troubleshooting inside SillyTavern, prove the endpoint, key, and model ID work on their own. This request was run against the live API and returned HTTP 200 with a normal chat completion:
curl https://api.novita.ai/openai/chat/completions \
-H "Authorization: Bearer $NOVITA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek/deepseek-v4.1-flash",
"messages": [{"role": "user", "content": "Reply with exactly: connection works"}],
"max_tokens": 300
}'
The response echoes "model": "deepseek/deepseek-v4.1-flash" and places the reply in choices[0].message.content. Streaming works on the same endpoint with "stream": true; the server responds with text/event-stream and standard data: chunks, which is the format SillyTavern consumes when streaming is enabled.
If curl succeeds and SillyTavern does not, the problem is on the client side: a key that was never saved through Connect, a model ID with stray whitespace, or an endpoint with a trailing slash. If curl also fails, read the status code in the next section before changing anything else in SillyTavern.
Which DeepSeek model should you use?
Novita AI hosts several DeepSeek families, and they differ enough that the choice affects both reply quality and cost. These are the chat models listed in the catalog on October 19, 2026:
| Model | Model ID | Input / output per 1M tokens | Context | Fit in SillyTavern |
|---|---|---|---|---|
| DeepSeek V4.1 Flash | deepseek/deepseek-v4.1-flash | $0.30 / $1.20 | 1,048,576 | Default choice: fast, cheap, long context |
| DeepSeek V4 Pro | deepseek/deepseek-v4-pro | $1.60 / $3.20 | 1,048,576 | Harder reasoning, higher cost |
| DeepSeek V4 Pro 0813 | deepseek/deepseek-v4-pro-0813 | $1.32 / $3.96 | 1,048,576 | Newer Pro snapshot at a different price mix |
| DeepSeek V4 Flash 0731 | deepseek/deepseek-v4-flash-0731 | $0.44 / $1.32 | 1,048,576 | Previous Flash snapshot |
| DeepSeek R1 0528 | deepseek/deepseek-r1-0528 | $0.70 / $2.50 | 163,840 | Visible reasoning, slower first token |
| DeepSeek R1 Turbo | deepseek/deepseek-r1-turbo | $0.70 / $2.50 | 64,000 | Same price as R1 0528 with far less context |
Pricing and context from the Novita AI model pages, checked October 19, 2026.
For a first setup, start with DeepSeek V4.1 Flash. At $0.30 per million input tokens it is the lowest-priced general-purpose option in the family, it handles a million tokens of context, and it is the faster tier for chat where latency matters more than depth. Move to a Pro variant when you need stronger instruction-following across long roleplay histories and the higher per-token price is acceptable.
DeepSeek R1 0528 is the interesting one for SillyTavern specifically, because it exposes reasoning separately from the reply. If you want the model to think before answering, it is the right pick; if you want immediate prose, it is the wrong one. You can read more about the V4 family’s long-context behavior in the DeepSeek V4 Pro long-context guide.
What the error codes actually mean
Novita AI returns a compact JSON error body rather than the OpenAI error.message envelope, so SillyTavern’s toast is not always informative. The table below uses responses captured from the live API on October 19, 2026.
| What you see | HTTP status | Response body | What it means |
|---|---|---|---|
| Authentication failure | 401 | {"code":401, "reason":"FAILED_TO_AUTH", "message":"failed to authenticate API key", "metadata":{}} | The key is wrong, revoked, or from another account |
| Empty key field | 403 | {"code":403, "reason":"INVALID_API_KEY", "message":"invalid API key", "metadata":{}} | No key was sent; the field is blank or not saved |
| Model not found | 404 | {"code":404, "reason":"MODEL_NOT_FOUND", "message":"model not found", "metadata":{"reason":"model: deepseek/deepseek-r1-9999 not found"}} | The model ID does not exactly match a catalog entry |
| Plain 404 page | 404 | 404 page not found | The request path is wrong, usually a trailing slash or a pasted /chat/completions |
Two behaviors make these errors easy to misread.
First, the model list at /openai/models answers without authentication. SillyTavern uses that list to fill Available Models, so the dropdown can populate with the full catalog and the connection can look healthy even when the key is invalid. Generation is the first step that actually verifies the key.
Second, SillyTavern displays its own wrapper message rather than Novita AI’s text. For streamed requests it may show a generic status error, and for non-streamed ones it may show only the HTTP reason phrase, such as Unauthorized. When the toast is vague, the HTTP status and the body in the table above are the reliable signal.
The model-not-found case is almost always a copied ID rather than a missing model. IDs are case-sensitive, keep their provider prefix, and tolerate no surrounding whitespace: DeepSeek-V4.1-Flash, deepseek-v4.1-flash, and deepseek/deepseek-v4.1-flash each returned MODEL_NOT_FOUND in testing, while the exact string succeeded. Re-copy the ID from the model page or pick it from the dropdown after a successful status check.
Two traps that look like model problems
A reply that arrives empty is usually not a failed request. DeepSeek R1 0528 and the V4 reasoning models spend tokens on internal reasoning before writing visible text. With a small response limit, the model exhausts its budget on reasoning and returns finish_reason: "length" with empty content — a 200 response that looks like a broken connection. Raise Response (tokens) in SillyTavern’s generation settings to at least 1500 for R1 before concluding anything is wrong. In testing, the same R1 0528 prompt returned an empty content with finish_reason: "length" at a 20-token limit and a normal reply once the limit was raised.
The second trap is a key that works in curl but not in SillyTavern. SillyTavern does not use whatever sits in the Custom API Key field at generation time. It saves the field into its own secret store when you press Connect and clears the field afterward. Paste a key, skip Connect, and start chatting, and the request runs without the new key and fails with 401. Paste the key, press Connect once, and only then send a message.
Conclusion
SillyTavern talks to Novita AI through the Custom (OpenAI-compatible) source with three values: the base URL https://api.novita.ai/openai, a Novita API key, and an exact model ID. Omit /v1, omit the trailing slash, and omit any path suffix. DeepSeek V4.1 Flash is the sensible default for character chat on cost and speed, while R1 0528 is the choice when you want visible reasoning and can accept slower, more token-hungry replies. Once the curl check returns a completion, any remaining problem is confined to the key field or the model ID, and the status codes in this guide will tell you which one.
FAQ
Can I use Novita AI’s DeepSeek models in SillyTavern?
Yes. Novita AI serves DeepSeek through an OpenAI-compatible chat completions endpoint, so SillyTavern’s Custom (OpenAI-compatible) source accepts it without a plugin or proxy. Connect with your key and a catalog model such as DeepSeek V4.1 Flash, then send a test message to confirm the setup.
Should I add /v1 to the Novita AI base URL?
No. https://api.novita.ai/openai is the documented base URL and it works as-is. The /v1 form also answered successfully when tested, so it will not break anything, but it adds a prefix the Novita AI examples do not use. Never append /chat/completions; SillyTavern adds that suffix automatically.
Why does SillyTavern say Unauthorized when my key looks correct?
Three causes cover most cases: the key was copied with a missing character, it belongs to a different Novita AI account, or the account has no balance. SillyTavern also saves the key only when you press Connect, so pasting a new value and sending a chat message without connecting still uses the old secret. Regenerate the key from Key Management if the 401 persists.
Why do I get model not found in SillyTavern?
The model ID does not exactly match a catalog entry. IDs are case-sensitive and include the provider prefix, for example deepseek/deepseek-r1-0528. Copy the ID from the DeepSeek R1 0528 model page or select it from the Available Models dropdown after connecting.
Why is DeepSeek R1’s reply empty in SillyTavern?
The response limit is too low. Reasoning models such as DeepSeek R1 0528 use tokens for internal reasoning before producing visible text, so a small limit leaves content empty with finish reason length. Raise Response (tokens) to at least 1500 and resend the message.
Does SillyTavern’s Available Models list prove the connection works?
No. Novita AI’s model list endpoint responds without authentication, so the dropdown fills even with an invalid key. Use Test Message or a first chat message to verify that authentication and model access actually work.