When a JanitorAI proxy fails, the status code tells you which part of the setup to look at, and the message after it usually names the exact problem. This guide lists every error a Composite key can return to JanitorAI, in the order people tend to hit them. The same errors apply in SillyTavern, ChubAI, RisuAI and any other OpenAI-compatible app.

If you have not connected yet, start with the JanitorAI setup guide and come back here if the test message fails.

Errors at a glance

StatusError codeWhat it means
401invalid_api_keyNo key reached Composite, or the key does not exist.
402insufficient_creditsThe request could cost more than your balance or plan has left.
403model_not_allowed, free_model_only, api_key_expiredThe key exists but is not allowed to make this request.
404model_not_foundThe model ID is wrong, retired, or a :free ID that is no longer on the list.
404not_foundThe URL is wrong, usually the base URL pasted where JanitorAI wants the full one.
400context_length_exceededThe chat, character and preset no longer fit in the model.
429rate_limit_exceeded, free_models_rpd_exceeded, non_payg_rate_limit_exceededA daily or per-minute limit was reached.

401: Authorization header required or Invalid API key

Authorization header required means no key arrived at all. In JanitorAI that almost always means the API key field is empty, or the key was saved under a different proxy configuration than the one the chat is using. Invalid API key means a key arrived but Composite has no key with that value.

  • Composite keys start with cmp-. Paste only the key. JanitorAI adds the Bearer prefix itself, so typing it in front produces a key that does not exist.
  • Check for a space or line break at either end of the pasted key. Copying from a phone often adds one.
  • A key you deleted, or one from an account you deleted, stays invalid. Create a new one on the API Keys page.

403: the key is valid but the request is refused

A 403 means Composite knows the key and the account, and something about this request is not allowed. The message says which rule refused it.

  • API key has expired. Some keys, such as ones an app created for you through sign-in with Composite, carry an expiry date and stop working once it passes. Make a new key.
  • Model … is not allowed by this API key or is blocked by this API key. The key has a model allow list or block list. Either pick a model the key allows, or change the key's model filters on the API Keys page. This is why one key can work for one model and fail on another.
  • This key is limited to free models. The key was made for free models only. Use Synth or a :free ID from the free models list, or create an ordinary key.
  • Account is under review or Account is banned. The account itself is blocked, not the key. A new key will not help; use the feedback page if you think it is a mistake.
  • Requests that define tools/function calling are rejected. JanitorAI does not send tools, so this one comes from coding assistants and agent tools. Composite's terms do not allow those integrations.

404: model not found, or the wrong URL

Two different problems share this status, and the message tells them apart.

Model x was not found. Check the model ID or use /v1/models. means the URL and key are fine but the model name is not one Composite serves. Model IDs include the maker, like lucidityai/synth-2.5-flash or deepseek/deepseek-v4-flash. A name copied from another proxy usually differs by a prefix or a dot. Copy the ID from the Models page instead of typing it.

An old :free or -free ID gets a longer message starting Free model variants were retired unless explicitly enabled by an admin. Nothing is charged. Composite stopped offering free copies of every model, and only the models on the current free list keep a working :free ID. Synth is free on every account under its normal ID.

Route POST /v1 not found (or any other Route … not found) means the URL is wrong. JanitorAI posts to exactly the URL you give it, so it needs the full https://composite.lucidity.sh/v1/chat/completions. SillyTavern and most other apps want the shorter https://composite.lucidity.sh/v1 and add the rest themselves. Swapping the two is the most common 404.

402: insufficient credits

Before a paid request runs, Composite reserves the most it could cost: the prompt plus the full max_tokens you asked for. If that is more than your balance, you get This request could cost up to $…, which is more than your available balance. On a plan the same check is written in plan credits. Your balance may well cover an ordinary reply; it is the worst case that does not fit.

  • Lower the max response length in JanitorAI's generation settings. A very high value reserves a lot even if replies are short.
  • Shorten the context, or switch to a cheaper model. Each model page lists its prices.
  • Add credits on the Plans page, or use Synth, which is free.

A key that draws on a shared quota pool returns This shared quota is out of funds. instead. That pool belongs to whoever shared it with you.

429: rate limits and daily limits

Composite has a few separate limits, and each one has its own message.

  • Daily Synth limit of 80 requests reached. Free accounts get 80 Synth requests a day, 300 a day in the first week after joining with a referral code. The message says when it resets. Credits or a plan make Synth unlimited.
  • Daily limit of 80 requests shared across selected free models reached. The :free IDs share one 80-a-day count between them, separate from Synth. Switching from one free model to another does not help. Credits and plans do not raise it, but you can switch to the paid ID or to Synth.
  • Free and BYOK requests are limited to 5 per minute per account. Requests that are not paid from wallet credits share a limit of 5 a minute. Regenerating rapidly or running two chats at once hits it. Wait the number of seconds in the message.
  • Usage spike protection paused paid requests. You turned on spike protection in account settings, and a burst of paid requests tripped it. Wait for the window to clear, or turn it off.
  • Too many requests. Please wait. The general per-account rate limit. Slow down for a minute.

If the key uses your own provider key (BYOK), Composite adds no daily limit of its own, so a 429 that does not match any message above came from your provider. Check your account with them.

400: context too long or blocked content

Request exceeds the context window means the character card, preset, lorebook entries and chat history no longer fit in the model. Turn JanitorAI's context size down to the model's window minus your max response length, pick a model with a larger window, or attach a memory layer to the key so older history is summarized rather than dropped. The features guide lists the layers and who can use them.

This request was blocked by Composite's automated content policy. means the input matched the content filter. The same message with response means the model's reply was blocked. Use the feedback page if you think it is a mistake.

Network error, no response, or the chat just spins

When JanitorAI shows a network error with no status code, it never got an answer it could read. Work through these in order:

  1. Check the URL character by character. It must start with https:// and end in /v1/chat/completions, with no trailing slash or space.
  2. Send a one-word test message. If that works and long chats fail, the problem is time, not the connection.
  3. Make reasoning shorter. Reasoning models can think for minutes before the first word. Composite waits up to four minutes for the provider and keeps streams alive while it waits, but your browser or app may give up sooner. Turn streaming on in JanitorAI, or lower the effort with a suffix like [low] on models that support it (see model modifiers).
  4. Check the model's status. The status page shows each model's recent success rate. If one provider is having a bad hour, switch models for now.

Still stuck?

Test the key outside JanitorAI. Composite's own Chat page lets you pick one of your keys and a model and send a message. If it works there, the key and model are fine and the problem is in the app's settings. For other apps, the SillyTavern, ChubAI and RisuAI guides each have their own troubleshooting section, and the JanitorAI proxy comparison covers other providers if you want to try one.