Docs

Janitor AI

Janitor AI's proxy configuration wants the full endpoint URL, not a base URL — the path ends in /chat/completions. Get that one field right and the rest is a name, a model id and a key.

API Settings → Proxy → Add Configuration: the Proxy URL is the full /v1/chat/completions path, and the Model Name has to be a catalog id exactly.

Janitor AI · API Settings
☰ → API Settings → Proxy → + Add Configuration

  Config Name   Kunavo
  Model Name    claude-sonnet-5
  Proxy URL     https://api.kunavo.com/v1/chat/completions
  API Key       sk-kn-...
The Proxy URL is a complete endpoint URL. Janitor AI's own guide says it must end with /chat/completions, so this is https://api.kunavo.com/v1/chat/completions — not the base URL you would paste into a coding tool. Pasting a base URL here is the usual cause of "proxy not working".
Model Name has to be exact. Janitor AI sends the string through unchanged, so a typo or a display name comes back as an error from the endpoint rather than a helpful message in the UI. Copy ids from GET /v1/models or from /models on this site.

Step by step

  1. Create a key at /app/keys and copy it — it is shown once.
  2. Open any chat, click the ☰ menu at the top and choose API Settings.
  3. Select Proxy, then + Add Configuration.
  4. Fill in Config Name, Model Name, Proxy URL and API Key exactly as above, then save.
  5. Send one message. A reply means the proxy works; an error naming the model means the Model Name, and an error naming the URL means the path.

Checked against Janitor AI's own proxy guide on September 6, 2026. Third-party settings move; if a field name here no longer matches what you see, that page is the authority, not this one.

Verify before you debug the client

One request settles whether a failure is the endpoint, the key, or the configuration file. If this returns JSON, the same base URL and key work in Janitor AI.

# Settles whether a failure is the endpoint, the key, or the client.
curl -sS https://api.kunavo.com/v1/models \
  -H "Authorization: Bearer sk-kn-..."

Which model id to put in the field

Every text model is reachable as a model id — the live list is GET /v1/models, and the catalog with prices is on the models page. Rates are USD per 1M tokens, input / output.

Model idKunavo in / outWhere it fits in Janitor AI
claude-sonnet-5$2.00 / $10.00the default — the balance most people want
claude-haiku-4-5$0.40 / $2.00cheapest per turn, and fast
claude-opus-5$2.00 / $10.00the expensive one; check the per-turn cost before committing
gemini-3-1-pro$0.70 / $4.20long conversations, where context size is the constraint
Billing is per token from a prepaid balance with no monthly fee — see billing. On repeated context — which is most of what an editor or a chat client sends — prompt caching moves the bill more than the model choice does.

FAQ

What Proxy URL does Janitor AI need?

The full chat-completions endpoint, not a base URL. Janitor AI's own guide states the URL must end with /chat/completions and gives a complete path as its example, so for an OpenAI-compatible service it is https://<host>/v1/chat/completions. Entering the base URL is the most common reason a proxy that is otherwise configured correctly returns nothing.

How do I set up a custom proxy in Janitor AI?

Open a chat, click the ☰ menu, choose API Settings, select Proxy, and click + Add Configuration. Fill in a Config Name, the exact Model Name, the Proxy URL ending in /chat/completions, and the API Key, then save and send a test message. A reply confirms all four fields at once.

Why does Janitor AI say the model is not found?

Because the Model Name is sent to the endpoint verbatim and has to match a real model id exactly — display names, capitalisation differences and trailing spaces all fail. Copy the id from the provider's model list or from a GET /v1/models call rather than typing it from memory.

Does using a proxy in Janitor AI cost money?

It costs whatever the endpoint behind the proxy charges. Janitor AI does not bill for proxy use; the API provider does, per token, for every message the conversation sends — which on a long roleplay chat includes the whole history each turn. Choosing a cheaper model, and an endpoint with prompt caching, is what keeps that bill small.