# Uncensored role-play API for SillyTavern, JanitorAI and other chat apps

Spicy API (spicyapi.com) speaks the OpenAI chat format, so any app that takes an OpenAI-compatible base URL and key can use its uncensored companion models. Each guide below was tested against the app itself, with the exact settings that worked.

## Tested apps

| App | What it is | Requests come from | Guide |
|---|---|---|---|
| SillyTavern | the open-source chat front end for role-play with character cards, run on your own computer | your machine | [SillyTavern guide](https://www.spicyapi.com/docs/integrations/sillytavern) |
| JanitorAI | the character chat site where you bring your own model through its Proxy setting | your browser | [JanitorAI guide](https://www.spicyapi.com/docs/integrations/janitorai) |
| KoboldAI Lite | the free browser chat and story front end from the KoboldAI project, at lite.koboldai.net | your browser | [KoboldAI Lite guide](https://www.spicyapi.com/docs/integrations/koboldai-lite) |
| RisuAI | a character chat app that runs in the browser at risuai.xyz | RisuAI's server | [RisuAI guide](https://www.spicyapi.com/docs/integrations/risuai) |
| Agnai | a character chat app for solo and group role-play, usable as a guest at agnai.chat | Agnai's server | [Agnai guide](https://www.spicyapi.com/docs/integrations/agnai) |
| Chatbox | a chat client for many AI providers, on the desktop and at web.chatboxai.app | your browser | [Chatbox guide](https://www.spicyapi.com/docs/integrations/chatbox) |
| TypingMind | a web chat front end for many AI models with your own keys, at typingmind.com | your browser | [TypingMind guide](https://www.spicyapi.com/docs/integrations/typingmind) |
| Open WebUI | the self-hosted chat interface for local and API models, usually run with Docker | your machine | [Open WebUI guide](https://www.spicyapi.com/docs/integrations/open-webui) |

## Any other OpenAI-compatible app

- Base URL: `https://api.spicyapi.com/v1` (apps that ask for the full URL: `https://api.spicyapi.com/v1/chat/completions`)
- API key: your `sk-spicy-...` key, sent as `Authorization: Bearer`
- Model: `spicy-companion-1` or `spicy-companion-1-flash`. The model list (`GET /v1/models`) also holds image, video and voice models, which chat cannot use.
- Streaming works, and CORS is open, so apps that call the API straight from the browser work too.
- Text only (no images in messages), `max_tokens` up to 8,192. Function calling works on `spicy-chat-1` and `spicy-companion-1` only.

## Which model to pick

| Model | Best for | Context (tokens) | Per 1M tokens (prompt / completion) | 100 messages at 4k / 16k context |
|---|---|---|---|---|
| `spicy-companion-1` | Role-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-flash` | The 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-1` | General 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`.

## Keep your key safe

- A separate key for each app: https://www.spicyapi.com/dashboard/api-keys, then Create key. You can revoke it without breaking anything else.
- 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 https://www.spicyapi.com/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.

## 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: https://www.spicyapi.com/acceptable-use

Questions or an app you want covered: contact@spicyapi.com.
