Compositev12
chat App guide

Use Composite as your JanitorAI proxy

JanitorAI supports custom OpenAI-compatible providers under its API settings. Point it at Composite's OpenAI-compatible chat completions endpoint to run community presets, lorebooks and plugins on your own provider key, or on Synth, LuciditySH's creative model, free on Composite, with no key at all.

What "JanitorAI proxy" means

JanitorAI does not run its own models. It sends every message to whichever OpenAI-compatible API you configure under Settings → API, and shows you the reply. People call that connection a "proxy" because the request passes through a service that stands between JanitorAI and the underlying model. The same term shows up as "reverse proxy" in older setup threads, and it means the same thing here. Composite is one such proxy: it forwards your request to a model you choose, handles authentication and billing, and returns an OpenAI-formatted response JanitorAI already knows how to read. You are not limited to one model behind it: a single Composite API key can reach every model on the platform, so switching characters or stories to a different model does not require a new key or a new proxy setup.

Paste values

Copy these directly into JanitorAI's API settings. Note that JanitorAI expects the full chat completions URL, not just the base URL.

chat

JanitorAI

Use these fields when configuring a custom OpenAI provider in JanitorAI.

API TypeOpenAI
Base URLhttps://composite.lucidity.sh/v1/chat/completions
API KeyYOUR_API_KEY
Modelminimax/minimax-m3

Setup steps

chatJanitorAI
Use Composite as a custom OpenAI-compatible provider.
expand_more
  1. Go to your JanitorAI profile, then open Settings → API.
  2. Under API Type, select OpenAI.
  3. Paste https://composite.lucidity.sh/v1/chat/completions into the OpenAI API URL field.
  4. Paste your Composite API key into the OpenAI API Key field.
  5. Enter a model ID (e.g. minimax/minimax-m3) into the model field, or leave it blank to use the default.
  6. Save and start a chat.
Why the full URL is required JanitorAI's custom OpenAI provider field expects a complete endpoint, not a base domain. Other frontends (SillyTavern, ChubAI) accept a shorter base URL and append the path themselves, so a value copied from one of those guides will not work here. Always use https://composite.lucidity.sh/v1/chat/completions for JanitorAI specifically.
Which key and model Accounts are free, and you make a key on the Keys page. Bind it to your own provider on the API Keys page (the BYOK quickstart takes two minutes) and use one of that provider's model ids, listed under Your provider on the Models page. With no provider, use lucidityai/synth-2.5-flash, LuciditySH's creative model, free on Composite.

Troubleshooting

The most common problems when using Composite as a JanitorAI proxy, and how to fix them.

link_offJanitorAI proxy not working
The connection fails before any reply comes back.
expand_more

Work through these in order: confirm the endpoint is the full https://composite.lucidity.sh/v1/chat/completions URL and not just the domain; confirm the API key was pasted with no leading or trailing spaces and no Bearer prefix typed in front of it; and confirm the model field contains an ID Composite actually serves, such as minimax/minimax-m3, rather than a name from another provider. Send a short test message before trusting a longer chat to the connection.

speed429 errors and rate limits
What a 429 means on Synth and on your own provider.
expand_more

A 429 response on Synth means today's Synth requests are used up: 80 a day, or 300 a day in your first week after joining with a referral code. They reset once a day at the time shown on your account page, and credits or a plan make Synth unlimited. A key bound to your own provider has no Composite daily limit, so a 429 there is your provider's own rate limit.

key_offInvalid API key error
Key format, the Bearer header, and key scoping.
expand_more

Composite API keys start with cmp- and are sent as a bearer token, so the OpenAI API Key field should hold only the key itself. JanitorAI adds the Bearer header for you. An invalid-key error usually means the key was revoked, mistyped, or deleted; generate a fresh one on the API Keys page. Each key can also be scoped to specific models, so a key that works for one model can still fail on another it is not allowed to use.

auto_awesomeWhich model should I use?
A short starting point for roleplay on JanitorAI.
expand_more
Use caseSuggestion
General roleplay, default choiceminimax/minimax-m3
No provider key yetlucidityai/synth-2.5-flash (Synth), free on every account
Long-running character or campaignA higher context-length model from the Models page, paired with a memory-layer setting on the key
Highest reply quality, budget flexibleCompare current premium models on the Models page

The catalog changes as models are added, so treat the Models page as the source of truth rather than a fixed list.

historyContext window on long roleplays
What happens when a chat outgrows the model's context.
expand_more

Every model has a fixed context window. Once a conversation exceeds it, Composite trims older messages to keep the request within limits, so long-running characters can start losing early details unless the key is set to one of Composite's memory-layer modes, which summarize and retrieve older history instead of dropping it outright. If replies start ignoring established facts in a long JanitorAI chat, check the key's memory-layer setting before assuming the model itself is at fault.

Still stuck after working through the above? The full docs cover account setup, API keys, and model access in more detail, and the feedback page reaches Composite directly if something looks broken rather than misconfigured.