# JanitorAI proxy setup with an OpenAI-compatible API

Connect JanitorAI to an OpenAI-compatible API: the exact proxy URL, model name and key fields, cost per message, and fixes for common errors. 18+.

## Short answer

In a JanitorAI chat, open **API Settings**, choose **Proxy**, and add a configuration with three values: the **full chat-completions URL** (`https://tryunrestrictedai.com/v1/chat/completions`), a **model ID** from our catalog (for example `venice-uncensored-role-play`), and your **API key**. Save, refresh, and send a test message.

18+ only. JanitorAI’s own content rules still apply to its site, and our [terms](/terms) apply to our API. The click-by-click version with copy buttons is on the [JanitorAI setup page](/api/integrations/janitorai).




## Before you start



- An Unrestricted AI account and an API key, created in the [console](/api/console). Keys are shown once.
- API usage needs a monthly plan (Starter is $19 and includes $19 of usage), a prepaid top-up from $5, or the one-time $0.50 API trial that verified accounts can claim in the console. The 50 free daily messages cover our chat app, not the API.
- Set a **per-key budget** on the key you give JanitorAI so a runaway chat cannot drain your balance.


## Step by step



- **Create a key.** Console, API keys, New key. Name it `janitorai` and set a budget. Copy it.
- **Open JanitorAI** and start or open a chat.
- **Open API Settings.** JanitorAI’s guide: "In the chat (top-right), click the gear icon > 'API Settings' > 'Add Configuration'".
- **Fill in the fields** from the table below.
- **Generation settings:** keep max new tokens at 4,096 or less and the total context at 32,768 tokens or less. Temperature, top-p and the other JanitorAI sliders are accepted (see the next section).
- **Save, refresh the page, and send a test message.** JanitorAI’s guide also tells you to refresh after saving.

| JanitorAI field | Value |
| --- | --- |
| Config Name | `Unrestricted AI` |
| Model Name | `venice-uncensored-role-play` (or any ID from the [catalog](/api/catalog)) |
| Proxy URL | `https://tryunrestrictedai.com/v1/chat/completions` (full path, no trailing slash) |
| API Key | Your key, with no spaces |

## What we tested (8 Nov 2026)

We sent JanitorAI-shaped requests to production: a streaming request with a system card, an opening assistant line and a user turn, plus `temperature`, `top_p`, `top_k`, `repetition_penalty`, `presence_penalty` and `frequency_penalty`. It streamed a reply. A browser preflight from `https://janitorai.com` returns `Access-Control-Allow-Origin: *`, so calls made from the JanitorAI page are allowed.

Requests can carry up to 256 messages. `temperature`, `top_p`, `max_tokens`, `stop` (up to 4 strings) and `stream` are forwarded to the model. Other sampler fields JanitorAI sends are accepted and ignored instead of causing an error.




## Which model to pick (per 1M tokens, 8 Nov 2026)

All routes below have a 32,768-token service context and 4,096 max output.



| Model ID | Input | Output | Notes |
| --- | --- | --- | --- |
| `venice-uncensored-role-play` | $1.00 | $4.00 | Venice’s role-play-tuned route |
| `venice-uncensored-1-2` | $1.00 | $2.00 | General default |
| `deepseek-v4-1-flash-uncensored` | $1.00 | $2.64 |  |
| `featherless-llama-3.3-70b-instruct-abliterated` | $1.30 | $2.00 | Abliterated 70B |

## What a message costs

Role-play resends the character card and chat history with every message, so input tokens dominate. Example on `venice-uncensored-role-play`: 8,000 input tokens plus 300 output tokens is $0.008 + $0.0012, **about $0.009 per message**, or roughly 108 messages per $1. Shorter chat memory costs less. Try your own numbers in the [cost calculator](/model-cost-calculator).




## Troubleshooting





| Symptom | Likely cause | Fix |
| --- | --- | --- |
| 401 | Wrong or revoked key, or extra spaces | Re-paste the key |
| 402 | Plan allowance, top-up, trial or key budget used up | Check the [console](/api/console) |
| 413 | Too much history for the service context | Lower the context or memory size in JanitorAI |
| 400 | A capability we do not offer: `n` above 1, `logprobs: true`, tools, or image content | Turn that option off; ordinary sampler sliders are fine |
| 429 | More than 30 requests a minute, or more than 3 in flight | Wait, and don’t spam regenerate |
| Network or "failed to fetch" | Usually a wrong URL path | Use the full `/v1/chat/completions` URL; CORS is open on `/v1` |

## FAQ

**Is it the full URL or the base URL?**

For JanitorAI, enter the full `/v1/chat/completions` URL. SillyTavern is different: it wants the base URL ending in `/v1`. See the [SillyTavern guide](/learn/sillytavern-custom-openai-endpoint).

**Can I use the free 50 messages a day in JanitorAI?**

No. The free allowance covers our chat app. API calls use a plan allowance, a top-up or the one-time $0.50 API trial.

**Does Unrestricted AI save my JanitorAI chats?**

API requests are not saved as conversations in our chat history, and prompt-text collection stopped on 8 Nov 2026. We keep usage metadata (timestamps, model, token counts, charges). The upstream provider processes the text. See the [privacy policy](/privacy).

**Why does the model still refuse sometimes?**

"Uncensored" means fewer blanket refusals, not guaranteed compliance. Try a different model ID, or read [what an abliterated model is](/learn/what-is-an-abliterated-model).

## Sources

- [JanitorAI TL;DR quickstart proxy instructions (checked 8 Nov 2026)](https://help.janitorai.com/en/article/tldr-quickstart-proxy-instructions-1x0fptu/)
- [Unrestricted AI model catalog (JSON)](https://tryunrestrictedai.com/api/catalog)
- [Unrestricted AI limits](https://tryunrestrictedai.com/api/docs/limits)
- [Unrestricted AI OpenAPI spec](https://tryunrestrictedai.com/openapi.json)
- [Unrestricted AI privacy policy](https://tryunrestrictedai.com/privacy)

Canonical: https://tryunrestrictedai.com/learn/janitorai-proxy-setup
