Chat apps

JanitorAI with Spicy API: uncensored role-play models

JanitorAI is the character chat site where you bring your own model through its Proxy setting. This guide connects it to Spicy API (spicyapi.com), so JanitorAI can use spicy-companion-1, a role-play model that holds a persona and writes explicit adult scenes, or spicy-companion-1-flash, the same tuning for about a ninth of the cost of a long chat. You pay per token from a prepaid balance, with no subscription.

What you need

  • A Spicy API account: sign in at /auth and accept the terms.
  • A separate key for JanitorAI: /dashboard/api-keys, then Create key. You can revoke it without breaking anything else. JanitorAI calls the API from your browser and keeps the key in its settings, so never reuse a key your own apps depend on.
  • A monthly spend limit on the account (same page, Monthly spend limit). Past it, requests fail with a 402 and nothing is charged, so a leaked key cannot drain your balance.
  • A balance (top up from $50 by card or crypto at /dashboard/account), or a sandbox key to try the setup first: tick Sandbox when you create the key. It answers with a fixed reply and bills nothing.

Connect JanitorAI

  1. Open any character and start a chat.
  2. Click the provider button at the top right of the chat (it reads "using janitor") to open Settings.
  3. Set Provider to Proxy.
  4. Under Proxy configurations click + New. Name: Spicy API. Proxy URL: https://api.spicyapi.com/v1/chat/completions (the full URL; the Add /chat/completions link adds the path if you paste the base). API key: your key. Model: spicy-companion-1 (typed, JanitorAI shows no model list). Click Add, then Save at the bottom.
  5. Reload the page. JanitorAI only lets the page reach a new proxy address after a reload; until then its Test button and the chat show "Network error. Try again later!".
  6. Send a message. The panel's button now reads "using proxy".

Which model to pick

ModelBest forContext (tokens)Per 1M tokens (prompt / completion)100 messages at 4k / 16k context
spicy-companion-1Role-play and companions: holds a persona, writes explicit adult scenes, group scenes.131,072$1.00 / $2.80$0.47 / $1.71
spicy-companion-1-flashThe same role-play tuning for about a ninth of the cost of a long chat. Fast.43,000 tested$0.10 / $0.80$0.06 / $0.19
spicy-chat-1General assistant. Not tuned for role-play; use a companion model for characters.200,000$0.80 / $2.40$0.38 / $1.38

Chat apps resend the whole conversation with every message, so the context size you set drives the cost far more than the length of the replies. The last column assumes a 250 token reply at 4k context and 400 at 16k. Every response carries its exact cost_usd.

SettingValue
Temperature (Generation settings)0.8 to 1.0; the default 1 is fine.
Max tokens0 means "let the model choose", which allows up to 4,096 tokens per reply. Set 300 to 600 to keep replies and cost in check.
Context sizeThe default is 50,000 tokens. 16,000 is a good balance of memory and cost; spicy-companion-1 holds 131,072 and Flash was tested to 43,000.
Advanced settings (Top K, Top P, penalties)Leave at 0: JanitorAI does not send them, so the model defaults apply.

If something goes wrong

StatusMeaningFix
400Wrong model id, or an option the chat models do not take (tools on spicy-companion-1-flash, images, more than 8,192 max tokens)Pick spicy-companion-1, spicy-companion-1-flash or spicy-chat-1; the error names the chat models
401Key missing, mistyped or revokedPaste the key again, or make a new one
402Balance empty, or the monthly spend limit reachedTop up, or raise the limit on the API keys page. Nothing is charged
422Blocked by moderationNothing is charged. See what is allowed below
429Too many requests in a minuteWait a minute; the app can retry
  • JanitorAI shows a failed request as a toast with the full error, for example PROXY ERROR 400: {"error":{"message":"spicy-animate-1 is a video-edit model, not a chat model. ..."}}.
  • JanitorAI builds the prompt on its own server, then your browser sends it straight to api.spicyapi.com, streamed, with the system prompt first.

What is allowed

Explicit role-play between adults is allowed, including non-consent between fictional adult characters (force, sleep, intoxication, framed as consensual non-consent or not) and other dark themes. Every message is screened before it reaches the model: minors in any form, real people (with or without consent), incest, real-world harm and the rest of the prohibited list are refused with a 422, before any charge. The screen reads the whole conversation, character card included, so a card that describes a minor or a real person is refused however the latest message is worded. Refusals in the most serious categories count as strikes. Send each user's id as user: the strikes then land on that user, who is refused after ten, and your account is only flagged. Without it they land on your account, flagged after three and suspended after ten. Drop a refused message from the history you send back, or the next message is refused too. A wrong refusal can be reported: POST its moderation_id to /v1/moderations/appeals. Full policy: /acceptable-use

Tested

janitorai.com on 30 Sep 2026 in Chrome 152: proxy configuration, the reload, two streamed chat turns with a sandbox key, and the error toast for a wrong model id.

Other apps: /docs/integrations. Questions: contact@spicyapi.com.