# How to Set Up DeepSeek on Janitor AI: Proxy URL, Model Name, Key

> For DeepSeek in Janitor AI, enter https://api.deepseek.com/chat/completions and the model deepseek-flash. deepseek-chat was discontinued on July 24, 2026.

- URL: https://blog.laozhang.ai/en/posts/how-to-set-up-deepseek-on-janitor-ai
- Published: 2026-05-09
- Updated: 2026-10-22
- Author: LaoZhang AI Team (https://blog.laozhang.ai/en/about)
- Topic: API Guides
- Tags: Janitor AI, DeepSeek, AI API, Proxy Setup

---
To set up DeepSeek on Janitor AI, open a chat, choose **Proxy**, add a configuration, and fill three fields from the same account. As of October 22, 2026, the direct DeepSeek values are: **Proxy URL** `https://api.deepseek.com/chat/completions`, **Model Name** `deepseek-flash` (or `deepseek-v4-pro`), and an **API key** from the DeepSeek Platform. Through OpenRouter, use `https://openrouter.ai/api/v1/chat/completions`, an OpenRouter key, and a slug such as `deepseek/deepseek-v4.1-flash`.

![Codex-generated route board for setting up DeepSeek on Janitor AI without mixing proxy URL, API key, and model name](https://blog.laozhang.ai/posts/en/how-to-set-up-deepseek-on-janitor-ai/img/cover.webp)

Values from older tutorials fail for specific reasons. `deepseek-chat` and `deepseek-reasoner` were scheduled for discontinuation on July 24, 2026, and DeepSeek no longer lists them. `deepseek-v4-flash` is still accepted, but DeepSeek now serves it with the newer V4.1 Flash model. OpenRouter lists no `:free` DeepSeek model as of the same date. If the first test fails, read the error before you change anything: 401 is the key, 402 is the balance, 404 is the URL or model name, and 429 is a rate or daily limit.

## Quick setup matrix

Pick one row and keep every field in that row. A typical broken setup combines a URL from one service, a key from another, and a model name copied from an old post.

![Codex-generated setup matrix showing DeepSeek direct route and provider proxy fields for Janitor AI](https://blog.laozhang.ai/posts/en/how-to-set-up-deepseek-on-janitor-ai/img/explainer-1.webp)

*The chart's model row and URL show the May 2026 values; the table and text below have the current ones.*

| Route | Proxy URL | API key | Model Name | Use it when |
| --- | --- | --- | --- | --- |
| Direct DeepSeek API | `https://api.deepseek.com/chat/completions` | DeepSeek Platform key | `deepseek-flash` or `deepseek-v4-pro` | You want DeepSeek's own prices, peak/off-peak billing, and one fewer middle layer |
| OpenRouter | `https://openrouter.ai/api/v1/chat/completions` | OpenRouter key | `deepseek/deepseek-v4.1-flash` or `deepseek/deepseek-v4-pro` | You already use OpenRouter credits or want one key for many models |
| Values from older tutorials | `https://api.deepseek.com/v1` or the bare base URL | Any | `deepseek-chat`, `deepseek-reasoner`, `deepseek-r1:free`, `deepseek/deepseek-chat-v3-0324:free` | Only to understand why an old setup stopped working; replace them with a row above |

Facts in this table are as of October 22, 2026, from [DeepSeek's models and pricing page](https://api-docs.deepseek.com/quick_start/pricing) and [OpenRouter's public model list](https://openrouter.ai/api/v1/models).

DeepSeek publishes `https://api.deepseek.com` as its OpenAI-format base URL, and its own example request goes to `https://api.deepseek.com/chat/completions`. Janitor's Proxy URL field shows the placeholder `https://url.com/v1` and offers an **Add /chat/completions** button, and Janitor's own OpenRouter instructions use the full chat-completions address. Enter the full URL. If you pasted only the base URL, click **Add /chat/completions** to complete it.

The `/v1/chat/completions` form also reaches DeepSeek's server: on October 22, 2026, both addresses answered a request carrying an invalid key with the same 401 message. That test proves the host is reachable. It does not prove a reply, because DeepSeek checks the key before it looks at the path. No message was sent from a Janitor chat with a funded DeepSeek key, so treat `/chat/completions` as the documented choice rather than a confirmed Janitor result.

## Choose direct DeepSeek or a provider proxy first

Use the direct DeepSeek API when you want DeepSeek's account, key, endpoint, model names, and prices. You top up a balance on the DeepSeek Platform; when it runs out, DeepSeek returns 402 Insufficient Balance. Prices are half during off-peak hours, which matters for long roleplay sessions (see the cost section below).

Use OpenRouter when you already have OpenRouter credits or want one key for many model families. Janitor then sends the request to OpenRouter, and OpenRouter picks a provider that serves the DeepSeek model you named. The model name must be OpenRouter's slug, with the `deepseek/` prefix. Per-token prices depend on the provider OpenRouter picks, so read them on the model's OpenRouter page.

Do not mix the two. A DeepSeek key sent to OpenRouter fails, an OpenRouter key sent to DeepSeek fails, and `deepseek/deepseek-v4.1-flash` sent to DeepSeek's endpoint fails because DeepSeek only knows `deepseek-flash` and `deepseek-v4-pro`. The 401 message tells you which service rejected the key:

| 401 message you see | Service that answered | What it means |
| --- | --- | --- |
| `Authentication Fails, Your api key: ****xxxx is invalid` | DeepSeek | The URL points at DeepSeek and the key is wrong, revoked, or from another service. The last four characters show which key was sent. |
| `Authentication Fails (governor)` | DeepSeek | No key reached DeepSeek. Paste the key into the API key field again. |
| `Missing Authentication header` | OpenRouter | The URL points at OpenRouter and the key is malformed, or it is a DeepSeek key. |
| `No cookie auth credentials found` | OpenRouter | No key reached OpenRouter. |

These messages were recorded on October 22, 2026 by sending requests with invalid or missing keys to both endpoints.

Janitor also has its own paid **janitor+ Router**, which bills per token from a Janitor wallet and needs no outside API key. Which models it offers has to be checked inside your Janitor account. Choose it only if you would rather not manage a DeepSeek or OpenRouter account.

## Set it up in Janitor AI

The button and field names below are the ones in Janitor's English interface text as of October 22, 2026 (interface version 10.0.0.143). Other interface languages and later versions can word them differently.

1. Open the chat where you want DeepSeek and open the API settings for that chat.
2. Choose **Proxy**.
3. Click **Add Configuration** (or **+ New** in the proxy configurations list).
4. Give it a **Configuration Name**, for example "DeepSeek Flash direct".
5. In **Model Name**, type `deepseek-flash`, or `deepseek-v4-pro` if you want the larger model.
6. In **Proxy URL**, paste `https://api.deepseek.com/chat/completions`. If you typed only `https://api.deepseek.com`, click **Add /chat/completions**.
7. In **API key**, paste your DeepSeek key with no spaces before or after it.
8. Leave **Custom prompt (optional)** empty for the first test.
9. Click **Check API Key/Model**. Janitor's help notes that this button can show "Network Error" even on a working setup; if it does, continue to the next step instead of rotating keys.
10. Click **Save Settings**, then refresh the page. Janitor's own notice says a new or changed Proxy URL takes effect only after a refresh.
11. Send one short message, such as "Reply with one sentence that says the connection works."

Keep the first test short so that any failure points at the connection, not at your character card. Two other details in the same panel are worth knowing. Janitor warns that it is not affiliated with any proxy and that your IP and chat log may be logged by the proxy service. When you export or copy configurations as JSON (`name`, `apiUrl`, `apiKey`, `model`), keys are not kept in history, so you re-enter the key after restoring.

To test the key outside Janitor, send the same values from a terminal. Replace `$DEEPSEEK_API_KEY` with your key or set it as an environment variable:

```bash
curl https://api.deepseek.com/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -d '{"model":"deepseek-flash","messages":[{"role":"user","content":"Reply with one sentence that says the connection works."}],"thinking":{"type":"disabled"}}'
```

A JSON reply with a `choices` array means the key, balance, and model name are fine, so the problem is in the Janitor fields or the missing refresh. A 401 or 402 here points to the key or the balance, and Janitor settings will not fix it. With an invalid key, this exact command returned HTTP 401 `Authentication Fails` on October 22, 2026; a successful run needs a funded key.

## Model name: current IDs, provider slugs, and old aliases

On DeepSeek's own API, two model names are current as of October 22, 2026: `deepseek-flash` and `deepseek-v4-pro`. Any other name in Janitor community posts is either an alias that still works for now or a name that has been removed.

| Name in the Model Name field | What it means on October 22, 2026 | Use it in Janitor? |
| --- | --- | --- |
| `deepseek-flash` | DeepSeek-V4.1-Flash-1017, released October 17, 2026. 1M context, thinking on by default. | Yes. The cheaper default. |
| `deepseek-v4-pro` | DeepSeek-V4-Pro-0813. 1M context, thinking on by default. Cache-miss input costs 4.4 times the Flash rate and output 3.3 times. | Yes, if you want the larger model. |
| `deepseek-v4-flash` | Legacy name. Still accepted, but the old V4 Flash model is retired; DeepSeek serves these requests with V4.1 Flash at the Flash price. | It works today. Switch to `deepseek-flash`, since DeepSeek has published no end date for the alias. |
| `deepseek-chat`, `deepseek-reasoner` | Scheduled for discontinuation on July 24, 2026 at 15:59 UTC and absent from DeepSeek's current docs. | No. Replace with `deepseek-flash`. |

Sources: [DeepSeek models and pricing](https://api-docs.deepseek.com/quick_start/pricing), the [DeepSeek V4.1 Flash-1017 release note](https://api-docs.deepseek.com/news/news261017), and the [archived DeepSeek docs page from July 15, 2026](https://web.archive.org/web/20260715065148/https://api-docs.deepseek.com/) that gives the `deepseek-chat` cutoff. The exact error a `deepseek-chat` request returns now was not tested.

If you searched for "DeepSeek V4 Flash" or "DeepSeek V4 Pro" on Janitor AI: V4 Pro is still `deepseek-v4-pro`, and V4 Flash has been replaced by V4.1 Flash under the name `deepseek-flash`. The old `deepseek-v4-flash` name still reaches V4.1 Flash for now.

On OpenRouter, names carry the `deepseek/` prefix. As of October 22, 2026 its catalog lists `deepseek/deepseek-v4.1-flash` and `deepseek/deepseek-v4-pro`, dated variants such as `deepseek/deepseek-v4.1-flash-1017` and `deepseek/deepseek-v4-pro-0813`, and older models such as `deepseek/deepseek-v3.2`, `deepseek/deepseek-r1-0528`, and `deepseek/deepseek-chat-v3-0324`. None of them ends in `:free`.

A model name only counts on the endpoint that receives it. `deepseek-flash` is unknown to OpenRouter, and `deepseek/deepseek-v4.1-flash` is unknown to DeepSeek. That mismatch is a frequent cause of a 404 after an otherwise correct setup.

## Troubleshooting the first failed test

![Codex-generated error map for 401, 404, 429, network error, invalid model, and API-not-ready Janitor AI DeepSeek setup failures](https://blog.laozhang.ai/posts/en/how-to-set-up-deepseek-on-janitor-ai/img/explainer-2.webp)

Change one field per retry. If you change the URL, key, model, and prompt at once, the next error cannot tell you which change mattered.

| First symptom | Likely cause | What to check first |
| --- | --- | --- |
| 401 Authentication Fails | Wrong key, or a key from the other service | Use the 401 message table above to see which service answered, then paste a fresh key from that service. |
| 402 Insufficient Balance (DeepSeek) or 402 on OpenRouter | No money left on that account | Top up DeepSeek or add OpenRouter credits. Model and URL changes will not help. |
| 404, "The selected model or proxy endpoint is unavailable" | Proxy URL path or Model Name not found on that endpoint | Confirm the URL ends in `/chat/completions` and the model name belongs to that service. On OpenRouter, "No endpoints found for model name" means the slug is gone. |
| 400 | Request format DeepSeek cannot read; on OpenRouter, often a request over the model's context length | Shorten memory or chat history, then retry with a short message. |
| 422 Invalid Parameters | A setting value DeepSeek does not accept | Reset Janitor's generation settings to defaults and retry. |
| 429 Rate Limit Reached | Requests too fast or too many at once; on OpenRouter free models, the daily cap | Wait, avoid rapid rerolls, and check OpenRouter's daily limit if you use a `:free` model. |
| 500 Server Error or 503 Server Overloaded | DeepSeek-side problem | Wait and retry later. Your settings are not the cause. |
| "A network error occurred" | Wrong Proxy URL or a page that was not refreshed after saving | Fix the URL, click **Save Settings**, and refresh the page. |
| Stuck generating, empty reply | Thinking mode taking long, or a busy server | Wait. DeepSeek keeps the connection open and gives up only if generation has not started after 10 minutes. Then lower the response length and test with a short message. |

DeepSeek's codes come from its [error code reference](https://api-docs.deepseek.com/quick_start/error_codes) and [rate limit page](https://api-docs.deepseek.com/quick_start/rate_limit); the OpenRouter and Janitor messages come from Janitor's [OpenRouter error guide](https://help.janitorai.com/en/article/openrouter-error-guide-10ear52/).

### "The selected model or proxy endpoint is unavailable" (404)

This message does not appear in Janitor's interface text or help pages, so its exact trigger is not documented. The 404 status and the wording point to one of two causes: the Proxy URL path does not exist on that host (for example a bare `/v1`), or the Model Name does not exist there (for example a `:free` DeepSeek slug on OpenRouter, or possibly `deepseek-chat` on DeepSeek). Fix the URL first, then copy a model name from the table above.

### "The AI provider rejected this request"

This message is also undocumented. Read it as "DeepSeek or OpenRouter returned an error." The cause is usually one of the coded errors above: a wrong key (401), no balance (402), an unknown model (404), or a request too long for the model (400). If Janitor shows a status code next to it, use that row of the table.

## Tune roleplay settings after the connection works

A working short test proves the connection, not the writing quality. Tune style after DeepSeek answers, one setting at a time.

### Thinking mode is on by default

Both `deepseek-flash` and `deepseek-v4-pro` run in thinking mode unless the request turns it off. The model writes its reasoning before the reply, so the first words arrive later and each reply uses more tokens. DeepSeek returns that reasoning separately from the reply, and Janitor's **Show Thinking** toggle decides whether you see it in the chat.

In thinking mode, DeepSeek ignores `temperature`, `presence_penalty`, and `frequency_penalty` without returning an error. Moving Janitor's temperature slider will therefore not change DeepSeek's style. Janitor's proxy settings, as listed in its current English interface text, have no field for DeepSeek's thinking switch, so expect thinking to stay on; this has not been confirmed in a live chat. Steer style through the character card and the custom prompt instead. The details are in [DeepSeek's thinking mode guide](https://api-docs.deepseek.com/guides/thinking_mode).

| Setting | Starting point | Why |
| --- | --- | --- |
| Temperature | Leave at default | DeepSeek ignores it while thinking is on |
| Max response length | Moderate for the first scenes | Longer replies cost more and take longer, on top of the reasoning text |
| Context and memory | Keep only what the scene needs | Janitor sends it with every message, so it drives cost |
| Rerolls | Fix a failing setting before rerolling | Each reroll is a full new request and is billed again |
| Custom prompt | Add after the connection works | A short style prompt is easier to debug than a long one |

### Custom prompt for DeepSeek V4 in Janitor

Janitor has two prompt fields for proxies. The **Global prompt** applies to all proxy configurations and is sent above the per-configuration **Custom prompt**. Use them for style, length, and staying in character. A short example that works with any model:

```text
Reply only as the character. Write in third person, past tense, 150–250 words.
Do not write dialogue or actions for my persona.
End each reply at a point where I can respond.
```

Keep the prompt short. Janitor sends it with every message, so a long prompt raises the cost of every reply. If replies run long or drift out of character, change one line at a time and test again.

## What one Janitor reply costs on DeepSeek: $0.0015 to $0.0125

Janitor's interface notes that your provider counts tokens for the full request: character details, your persona, conversation history, memory, selected prompts, and any platform safety instructions. The character's token count alone understates it. So input tokens, not the reply, drive the cost of a long chat.

DeepSeek prices per 1 million tokens as of October 22, 2026:

| Model | Input, cache miss (off-peak / peak) | Input, cache hit (off-peak / peak) | Output (off-peak / peak) |
| --- | --- | --- | --- |
| `deepseek-flash` | $0.15 / $0.30 | $0.003 / $0.006 | $0.60 / $1.20 |
| `deepseek-v4-pro` | $0.66 / $1.32 | $0.022 / $0.044 | $1.98 / $3.96 |

Worked example for one reply with 8,000 input tokens (no cache hits) and 500 output tokens:

- `deepseek-flash` off-peak: 8,000 × $0.15 / 1M + 500 × $0.60 / 1M = $0.0012 + $0.0003 = **$0.0015**, about $0.15 per 100 replies.
- `deepseek-flash` peak: **$0.0030**, about $0.30 per 100 replies.
- `deepseek-v4-pro` off-peak: $0.00528 + $0.00099 = **$0.00627**, about $0.63 per 100 replies.
- `deepseek-v4-pro` peak: **$0.01254**, about $1.25 per 100 replies.

Thinking mode adds reasoning text to each reply, so real costs will likely run above these figures; DeepSeek's thinking mode guide does not state a separate rate for reasoning tokens. Any part of the input billed as a cache hit costs far less, as the table shows.

Peak hours are 01:00–04:00 and 06:00–10:00 UTC, Monday through Friday, except Chinese public holidays. In US Eastern Daylight Time that is 9 PM to midnight and 2 AM to 6 AM, from Sunday evening to Friday morning; after clocks fall back on November 1, both windows start one hour earlier on the clock. Weekends are off-peak all day. DeepSeek says its prices can change. For the full price table and when waiting pays off, see [DeepSeek API Peak Hours: Current Prices and When to Wait](https://blog.laozhang.ai/en/posts/deepseek-v4).

## Free DeepSeek routes are not a setup guarantee

As of October 22, 2026, there is no free DeepSeek model on OpenRouter. Its catalog has 18 models ending in `:free`, and none is a DeepSeek model. Janitor's own [TL;DR Quickstart Proxy Instructions](https://help.janitorai.com/en/article/tldr-quickstart-proxy-instructions-1x0fptu/), last updated in January 2025, still shows `deepseek/deepseek-chat-v3-0324:free`. That slug is no longer in OpenRouter's catalog; Janitor's OpenRouter error guide lists 404 "No endpoints found for model name" for a model that is gone.

OpenRouter's free models of other brands have limits: 20 requests per minute, plus 50 requests per day on accounts that have bought less than 10 credits, or 1,000 per day after buying at least 10 ([OpenRouter API rate limits](https://openrouter.ai/docs/api/reference/limits)). A long roleplay session can hit 50 messages quickly, especially with rerolls.

The cheapest honest DeepSeek option is the paid one at off-peak hours: on `deepseek-flash`, a typical 8,000-token reply costs about $0.0015, as calculated above. Sites that offer "free DeepSeek proxies" or shared keys sit between you and the model, can log your chats, and can disappear without notice.

Never paste your own API key into a character card, a public prompt, a screenshot, or a shared preset. The key belongs only in Janitor's **API key** field or in your provider dashboard. If a key leaks, delete it in the DeepSeek or OpenRouter dashboard and create a new one.

## FAQ

### What proxy URL should I use for DeepSeek on Janitor AI?

For DeepSeek's own API, use `https://api.deepseek.com/chat/completions`. If you entered only `https://api.deepseek.com`, click **Add /chat/completions** in Janitor's Proxy URL field. For OpenRouter, use `https://openrouter.ai/api/v1/chat/completions`. Refresh the page after saving.

### Which DeepSeek model name should I put in Janitor AI?

On the direct DeepSeek API, use `deepseek-flash` (DeepSeek-V4.1-Flash-1017 as of October 22, 2026), or `deepseek-v4-pro` for the larger, pricier model. On OpenRouter, use `deepseek/deepseek-v4.1-flash` or `deepseek/deepseek-v4-pro`. Names without the `deepseek/` prefix only work on DeepSeek's endpoint.

### Can I use `deepseek-chat` or `deepseek-reasoner`?

No. DeepSeek scheduled both names for discontinuation on July 24, 2026, and they are no longer in its docs. Replace them with `deepseek-flash`. Thinking mode, which `deepseek-reasoner` used to provide, is now on by default.

### Does deepseek-v4-flash still work on Janitor AI?

Yes, for now. DeepSeek still accepts `deepseek-v4-flash` but serves it with V4.1 Flash at the Flash price, and recommends switching to `deepseek-flash`. No end date for the old name has been published.

### Is OpenRouter required for Janitor AI DeepSeek setup?

No. Janitor's proxy option works with DeepSeek's own API directly. Choose OpenRouter only if you want one OpenRouter key and credit balance for many models. Its DeepSeek models are paid.

### Is there a free DeepSeek proxy for Janitor AI?

Not on OpenRouter as of October 22, 2026: none of its 18 `:free` models is a DeepSeek model. Paid `deepseek-flash` at off-peak hours costs about $0.0015 for an 8,000-token reply. Avoid sites that hand out shared keys.

### Why does Janitor AI say invalid model?

The Model Name does not exist on the endpoint in your Proxy URL. Common cases are a `deepseek/...` slug sent to DeepSeek, `deepseek-flash` sent to OpenRouter, an old `:free` slug, or a discontinued name such as `deepseek-chat`. Copy a name from the model table above that matches your URL.

### Why do I get 401 after pasting my DeepSeek API key?

The key was rejected by the service your Proxy URL points to. `Authentication Fails, Your api key: ****xxxx is invalid` means DeepSeek rejected it; check the last four characters and look for extra spaces. `Missing Authentication header` means the URL points to OpenRouter, which does not accept DeepSeek keys.

### Why do I get 429 or quota errors?

On DeepSeek, 429 means requests are too fast or too many at once; slow down and avoid rapid rerolls. An empty DeepSeek balance gives 402 instead. On OpenRouter free models, 429 "free-models-per-day" means the daily cap of 50 or 1,000 requests is used up.

### What prompt should I use for DeepSeek V4 on Janitor AI?

Start without one, confirm the connection, then add a short **Custom prompt** about style, length, and staying in character, like the example in the roleplay settings section. Janitor sends the prompt with every message, so shorter prompts also cost less.

### Where should I learn more about current DeepSeek API models?

For DeepSeek's model names, prices, and peak hours, see [DeepSeek API Peak Hours: Current Prices and When to Wait](https://blog.laozhang.ai/en/posts/deepseek-v4). For using the same DeepSeek and OpenRouter accounts in Claude Code instead of Janitor, see [Claude Code with OpenRouter and DeepSeek: Setup, Routes, and First-Error Fixes](https://blog.laozhang.ai/en/posts/claude-code-openrouter-deepseek).

## Sources checked

- [DeepSeek API docs: first API call and base URL](https://api-docs.deepseek.com/)
- [DeepSeek models and pricing](https://api-docs.deepseek.com/quick_start/pricing)
- [DeepSeek V4.1 Flash-1017 release note](https://api-docs.deepseek.com/news/news261017)
- [DeepSeek thinking mode guide](https://api-docs.deepseek.com/guides/thinking_mode)
- [DeepSeek error code reference](https://api-docs.deepseek.com/quick_start/error_codes)
- [DeepSeek rate limit page](https://api-docs.deepseek.com/quick_start/rate_limit)
- [DeepSeek list models API](https://api-docs.deepseek.com/api/list-models)
- [Archived DeepSeek docs page from July 15, 2026 with the deepseek-chat cutoff](https://web.archive.org/web/20260715065148/https://api-docs.deepseek.com/)
- [Janitor AI help: TL;DR Quickstart Proxy Instructions](https://help.janitorai.com/en/article/tldr-quickstart-proxy-instructions-1x0fptu/)
- [Janitor AI help: OpenRouter error guide](https://help.janitorai.com/en/article/openrouter-error-guide-10ear52/)
- [Janitor AI help: Troubleshooting Deepseek via Openrouter](https://help.janitorai.com/en/article/troubleshooting-deepseek-via-openrouter-8xko1u/)
- [OpenRouter API rate limits](https://openrouter.ai/docs/api/reference/limits)
- [OpenRouter public model list](https://openrouter.ai/api/v1/models)
- [OpenRouter chat completion API docs](https://openrouter.ai/docs/api/api-reference/chat/send-chat-completion-request)
